#include<bits/stdc++.h>
using namespace std;
int n,m,dp[500][500],
vector<int> g[500];
void dfs(int x){
for(int i=0;i<g[x].size();i++){
int y=g[x][i];
dfs(y);
for(int j=m+1;j>=1;j--) for(int k=0;k<j;k++) dp[x][j]=max(dp[x][j],dp[y][k]+dp[x][j-k]);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
int x,y;
cin>>x>>y;
g[x].push_back(i);
dp[i][1]=y;
}
dfs(0);
cout<<dp[0][m+1];
return 0;
}