#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,v[105],w[105],h[105], e[105], ne[105], idx,f[105][105];
void add(int a,int b)
{
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs(int u)
{
int i,son,j,k;
for(i=h[u];~i;i=ne[i]){
son=e[i];
dfs(e[i]);
for(j=m-v[u];j>=0;j--)for(k=0;k<=j;k++)f[u][j]=max(f[u][j],f[u][j-k]+f[son][k]);
}
for(i=m;i>=v[u];i--)f[u][i]=f[u][i-v[u]]+w[u];
for(i=0;i<v[u];i++)f[u][i]=0;
}
int main()
{
scanf("%d%d",&n,&m);
memset(h,-1,sizeof h);
int root,p,i;
for(i=1;i<=n;i++){
scanf("%d%d%d",&v[i],&w[i],&p);
if(p==-1)root=i;
else add(p,i);
}
dfs(root);
printf("%d\n",f[root][m]);
return 0;
}