l,r,a:array[0..1000] of longint;
f:array[0..1000,0..100] of longint;
i,j,k,m,n:longint;
function max(x,y:longint):longint;
begin
if x>y then exit(x);
exit(y);
end;
procedure dfs(x,k:longint);
var
i:longint;
begin
if x<=0 then exit;
if k<=0 then exit;
if f[x,k]>0 then exit;
dfs(r[x],k);
f[x,k]:=f[r[x],k];
for i:=0 to k-1 do
begin
dfs(l[x],i);
dfs(r[x],k-i-1);
f[x,k]:=max(f[x,k],f[l[x],i]+f[r[x],k-i-1]+a[x]);
end;
end;
begin
assign(input,'stupid in.txt');reset(input);
assign(output,'stupid out.txt');rewrite(output);
readln(n,m);
for i:=1 to n do
read(a[i]);
readln;
for i:=1 to n do
begin
readln(j,k);
r[k]:=l[j];
l[j]:=k;
end;
fillchar(f,sizeof(f),0);
dfs(l[0],m);
writeln(f[l[0],m]);
end.