#include<bits/stdc++.h>
using namespace std;
const int N=400;
int f[N][N];
int n,m;
int ki[N],si[N];
vector<int> G[N];
int dfs(int u){
int currents_nodes=1;
for(int v:G[u]){
int child_nodes=dfs(v);
for(int i=min(m,currents_nodes);i>0;i--){
for(int j=1;j<=min(child_nodes,m-i);j++){
f[u][i+j]=max(f[u][i+j],f[u][i]+f[v][j]);
}
}
currents_nodes+=child_nodes;
}
return currents_nodes;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>ki[i]>>si[i];
f[i][1]=si[i];
G[ki[i]].push_back(i);
}
m++;//虚拟化一个基础选修课
dfs(0);
cout<<f[0][m]<<endl;
return 0;
}