#include<bits/stdc++.h>
using namespace std;
const int N = 310;
int n,m,a,f[N],s[N],g[N][2],dp[N],mm,o;//0 分数和 1 总数
vector <int> q[N];
queue <int> d_0;
inline void read(int &x)
{
x = 0;
int f = 1;
char s = getchar();
while(s < '0' || s > '9')
{
if(s == '-') f = -1;
s = getchar();
}
while(s >= '0' && s <= '9')
{
x = x * 10 + s - 48;
s = getchar();
}
x *= f;
return;
}
void dfs(int x,int c)//c 选c门课程
{
// cout << x << ' ' << c << endl;
if(c > m) return;
g[x][0] = s[x] + g[f[x]][0];
g[x][1] = g[f[x]][1] + 1;
if(g[x][1] > o)
{
mm = mm - o + g[x][1];
o = g[x][1];
}
dp[c] = max(g[x][0] + dp[c - g[x][1]],dp[c]);
// cout << dp[c] << endl;
for(int to = 0;to < q[x].size();to ++)
dfs(q[x][to],c + 1);
return;
}
int main()
{
read(n),read(m);
for(int i = 1;i <= n;i ++)
{
read(a),read(s[i]);
f[i] = a;
q[a].push_back(i);
}
for(int i = 1;i <= n;i ++) if(!f[i]) d_0.push(i);
// cout << endl << endl;
while(!d_0.empty())
{
int to = d_0.front();
d_0.pop();
if(!g[to][1])
{
int j = to;
while(f[j]) j = f[j];
o = 0;
int v = mm;
for(int i = v + 1;i > 0;i --) dfs(j,i);
}
}
printf("%d\n",dp[m]);
return 0;
}