#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int m,n;
int a,b;
int sum,des[305],val[305],head[305],next[305];
int dp[305][305];
void add(int x,int y,int z)
{
des[++sum]=y;
val[sum]=z;
next[sum]=head[x];
head[x]=sum;
}
void dfs(int x)
{
for(int i=head[x];i!=0;i=next[i])
{
int y=des[i],z=val[i];
dfs(y);
for(int j=m+1;j>=1;j--)
{
for(int g=0;g<=j-1;g++)
{
dp[x][j]=max(dp[x][j],dp[y][g]+dp[x][j-g]+z);
}
}
}
return;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a>>b;
add(a,i,b);
}
dfs(0);
cout<<dp[0][m+1];
return 0;
}