/**************************************************************
Problem: 2809
User: liuxin
Language: Pascal
Result: Accepted
Time:2060 ms
Memory:5516 kb
****************************************************************/type
Edge=record
ed,nt:array[0..200005]of longint;
lt:array[0..100005]of longint;
l:longint;
end;
Node=record l,r,v:longint; end;
var
E:Edge;
ans:int64;
i,k,n,m,cnt:longint;
h:array[0..100005]of Node;
heap,size,lead,cap,num:array[0..100005]of longint;
procedure swap(var i,j:longint);var k:longint; begin k:=i; i:=j; j:=k; end;
function merge(p,q:longint):longint;
beginif (p=0) thenexit(q) elseif (q=0) thenexit(p);
if (h[p].v<h[q].v) then swap(p,q);
h[p].r:=merge(h[p].r,q); swap(h[p].l,h[p].r); exit(p);
end;
procedure dfs(x:longint);
var i,y:longint;
begin
cap[x]:=size[x]; num[x]:=1; i:=E.lt[x];
inc(cnt); heap[x]:=cnt; h[cnt].l:=0; h[cnt].r:=0; h[cnt].v:=size[x];
while (i>0) do begin
y:=E.ed[i]; dfs(y);
cap[x]:=cap[x]+cap[y]; num[x]:=num[x]+num[y];
heap[x]:=merge(heap[x],heap[y]);
while (cap[x]>m) do begin
cap[x]:=cap[x]-h[heap[x]].v; dec(num[x]);
heap[x]:=merge(h[heap[x]].l,h[heap[x]].r);
end;
i:=E.nt[i];
end;
if (int64(num[x])*lead[x]>ans) then ans:=int64(num[x])*lead[x];
end;
procedure add(x,y:longint);
begin inc(E.l); E.ed[E.l]:=y; E.nt[E.l]:=E.lt[x]; E.lt[x]:=E.l; end;
begin
readln(n,m); E.l:=0; ans:=0;
for i:=1to n do begin
readln(k,size[i],lead[i]);
if (k>0) then add(k,i);
end;
dfs(1); writeln(ans);
end.