RT
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m;
int w[310];
int head[310],nxt[610],to[610],cnt;
int dp[310][310];
void add(int u,int v) {
cnt++;
nxt[cnt]=head[u];
to[cnt]=v;
head[u]=cnt;
}
int dfs(int u,int fa,int num) {
if(num==0) return 0;
if(dp[u][num]) return dp[u][num];
for(int i=1;i<=num;i++) {
dp[u][i]=w[u];
}
for(int i=head[u];i;i=nxt[i]) {
int v=to[i];
if(v==fa) continue;
for(int j=num;j>=1;j--) {
for(int k=0;k<j;k++)
dp[u][j]=max(dp[u][j],dfs(v,u,k)+dp[u][j-k]);
}
}
return dp[u][num];
}
int main() {
scanf("%d%d",&n,&m);
int from,val;
for(int i=2;i<=n+1;i++) {
scanf("%d%d",&from,&val);
from++;
add(from,i);
add(i,from);
w[i]=val;
}
printf("%d",dfs(1,0,m+1));
return 0;
}