program universitate_cu_flux_brut;
var f,g:text;
maxf,min,pas,k,p,n,m,i,j,c,x,y,s,d:longint;
a:array[1..208,1..108] of longint;
viz,cd,pred:array[1..108] of integer;
procedure bfs(nod,mark:integer; var min:longint);
var p,i,st,sf:longint;
begin
min:=maxlongint;
st:=0; sf:=1; cd[1]:=nod; pred[nod]:=0; viz[nod]:=mark;
while st<sf do
begin
inc(st);
for i:=1 to n do
begin
if a[cd[st],i]>0 then
if viz[i]<>mark then
begin
if min>a[cd[st],i] then min:=a[cd[st],i];
inc(sf);
cd[sf]:=i;
viz[cd[sf]]:=mark;
pred[cd[sf]]:=cd[st];
end;
end;
end;
end;
function pot(sursa,destinatie,mark:longint; var min:longint):boolean;
begin
bfs(1,mark,min);
if (viz[sursa]=mark) and (viz[destinatie]=mark) then pot:=true
else pot:=false;
end;
begin
assign(f,'universitate.in'); reset(f);
assign(g,'universitate.out'); rewrite(g);
readln(f,n,m,k);
maxf:=0;
for i:=2 to n do
a[1,i]:=1;
for i:=1 to n do
begin
while not eoln(f) do
begin
read(f,p);
a[i+1,p]:=1;
end;
readln(f);
end;
for i:=1 to m do
begin
while not eoln(f) do
begin
read(f,p);
a[p,n+k+i+1]:=1;
end;
readln(f);
end;
pas:=1;
while pot(1,n,pas,min) do
begin
maxf:=maxf+min;
i:=pred[n];
j:=n;
while i<>0 do
begin
a[i,j]:=a[i,j]-min;
j:=i;
i:=pred[j];
end;
inc(pas);
end;
writeln(g,m-maxf);
close(f); close(g);
end.