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