modetree=record
l,r,q:integer;
end;
const
maxn=1024;
var
tree:array[1..maxn] of modetree;
n,m,i,k:integer;
f:array[1..maxn,0..109] of longint;
c,e:array[1..maxn] of longint;
pass:array[1..maxn,0..109] of boolean;
function find(r,j:integer):longint;
var
t:longint;
i:integer;
begin
if j<0 then exit(0);
if pass[r,j] then exit(f[r,j]);
if j>=c[r] then f[r,j]:=e[r];
for i:=0 to j do
begin
t:=0;
if tree[r].l<>0 then inc(t,find(tree[r].l,i));
if tree[r].r<>0 then inc(t,find(tree[r].r,j-i));
if t>f[r,j] then f[r,j]:=t;
end;
pass[r,j]:=true;
exit(f[r,j]);
end;
//============ m a i n ================\begin
readln(n,m);
for i:=2 to n do
begin
read(k);
if tree[k].l=0 then tree[k].l:=i
else tree[tree[k].q].r:=i;
tree[k].q:=i;
end;
for i:=1 to n do read(c[i]);
for i:=1 to n do read(e[i]);
writeln(find(1,m));
end.
//===========\我觉得这样挺美观的...以前我都用//==========老丑了..这次改了一占下...结果出这问题
"\\"这个不让用啊