#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,ans,dis[100005],l[100005],r[100005],size[100005],sum[100005];
int root[100005],fa[100005],cost[100005],val[100005];
int merge(int x,int y)
{
if(!x)return y;
if(!y)return x;
if(cost[y]>cost[x])swap(x,y);
r[x]=merge(r[x],y);
if(dis[r[x]]>dis[l[x]])swap(l[x],r[x]);
if(!r[x])dis[x]=0;
else dis[x]=dis[r[x]]+1;
return x;
}
signed main()
{
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%lld%lld%lld",&fa[i],&cost[i],&val[i]);
size[i]=1;root[i]=i;sum[i]=cost[i];
ans=max(ans,val[i]);
}
for(int i=n;i>1;i--)
{
root[fa[i]]=merge(root[i],root[fa[i]]);
size[fa[i]]+=size[i];
sum[fa[i]]+=sum[i];
while(sum[fa[i]]>m)
{
size[fa[i]]--;
sum[fa[i]]-=cost[root[fa[i]]];
root[fa[i]]=merge(l[root[fa[i]]],r[root[fa[i]]]);
}
ans=max(ans,size[fa[i]]*val[fa[i]]);
}
printf("%lld",ans);
return 0;
}