{
TASK:trip
LANG:pascal
}
var
a:array[1..100,1..100] of integer;
u:array[1..500] of integer;
path:array[1..100,0..100] of integer;
q,mm:array[1..1000] of integer;

n,m,k,i,j,x,y,b,e,max,index:integer;

procedure init;
var
r,p:integer;
begin
for r:=1 to n do begin q[r]:=0; mm[r]:=0; end;
for r:=1 to n do
 for p:=1 to n do
  path[r,p]:=0;
end;

procedure copath(a,b:integer);
var ij:integer;
begin
 for ij:=0 to path[a,0] do
  path[b,ij]:=path[a,ij]
end;

procedure bfs(x:integer);
var ji:integer;
begin
 b:=1;
 e:=1;
 q[1]:=x;
 mm[x]:=1;
 for i:=1 to n do begin
  path[i,1]:=x;
  path[i,0]:=1;
 end;
 repeat
  for i:=1 to n do
   if (a[q[b],i]=1) and (mm[i]=0) then
      begin
       inc(e);
       q[e]:=i;
       mm[i]:=1;
       copath(q[b],q[e]);
       inc(path[q[e],0]);
       path[q[e],path[q[e],0]]:=q[e];
      end;
  inc(b);
 until e<b;
 for ji:=1 to k do
  for i:=1 to n do
   for j:=1 to path[i,0] do
    if path[i,j]=u[ji] then path[i,j]:=0;
 for i:=1 to n do begin
  m:=0;
  for j:=1 to path[i,0] do
   if path[i,j]<>0 then inc(m);
  if m>max then max:=m;
 end;
end;

begin
 readln(n,m,k);
 for i:=1 to m do begin
  readln(x,y);
  a[x,y]:=1;
  a[y,x]:=1;
 end;
 for i:=1 to k do
 read(u[i]);
 max:=0;
 for index:=1 to n do begin
  init;
  bfs(index);
 end;
 writeln(max);
end.