var
f:array[0..1000,0..100] of longint;
go:array[0..1000] of longint;
w:array[0..1000] of longint;
n,m,i,j,k,t,ans,a,b:longint;
function max(a,b:longint):longint;
begin
if a<b then exit(b);
exit(a);
end;
function dfs(i,j:longint):longint;
var
k,x:longint;
begin
if f[i,j]<>-maxlongint then exit(f[i,j]);
f[i,j]:=0;
dfs:=0;
k:=go[i];
for x:=1 to j-1 do
f[i,j]:=max(dfs(k,j-x)+w[i],f[i,j]);
exit(f[i,j]);
end;
begin
assign(input,'ycdkg.in');
reset(input);
assign(output,'ycdkg.out');
rewrite(output);
readln(n,m);
for i:=1 to n do read(w[i]);
for i:=1 to n do for j:=0 to m do f[i,j]:=-maxlongint;
for i:=1 to n do
begin
readln(a,b);
go[b]:=a;
end;
for i:=1 to m do f[0,i]:=0;
for i:=1 to n do
begin
ans:=max(ans,dfs(i,m));
end;
writeln(ans);
close(input);
close(output);
end.