#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
vector<int> t[1324];
int dp[123456],p[123456];
bool f[123456];
int n,m,a,b;
void dfs(int k,int sum,int c){
if(c>m) return ;
for(int j=m;j>=c;--j) dp[j]=max(dp[j-c]+sum,dp[j]);
for(int i=0;i<t[k].size();++i){
dfs(t[k][i],sum+p[t[k][i]],c+1);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;++i){
scanf("%d%d",&a,&b);
if(a!=0){ f[i]=1;t[a].push_back(i);}
p[i]=b;
}
for(int i=1;i<=n;++i){
if(f[i]==0)
dfs(i,p[i],1);
}
cout<<dp[m];
}