#include<bits/stdc++.h>
#define N 305
using namespace std;
struct node
{
int to,nex;
}e[N*4];
int n,q,cnt,dis[N];
int head[N],in[N],dp[N][N],a[N],siz[N];
bool vis[N];
inline void add(int x,int y)
{
e[++cnt].to=y;
e[cnt].nex=head[x];
head[x]=cnt;
}
inline void dfs(int x,int fa)
{
for (int i=head[x];i;i=e[i].nex)
{
int y=e[i].to;
if (y==fa) continue;
dfs(y,x);
for (int j=1;j<=q;++j)
{
for (int k=1;k<=j;++k)
{
dp[x][j]=max(dp[x][j],dp[y][j-k]+dp[x][k]);
}
}
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin >> n >> q;
for (int i=1;i<=n;++i)
{
int x;
cin >> x >> a[i];
dp[i][1]=a[i];
dp[i][0]=0;
add(x,i);
}
dfs(0,-1);
cout << dp[1][q];
return 0;
}