{
TASK:trip
LANG:PASCAL
}
{$R-}
const
 max=1010;
var
  p,b:array [0..max,0..max] of integer;
  bc:array [0..max] of integer;
  u,c:array [0..max] of boolean;
  q1,q2:array [0..max*max] of integer;
  i,j,k,l,n,m,mx:longint;
  t:text;
  st,si:array [0..max] of integer;
  sz:integer;

  procedure dfs(s,l:integer);
   var
    i,j:integer;
    fl:boolean;
   begin
{     p[s,r]:=l; if l>mx then mx:=l;
     u[r]:=true;
     for i:=1 to bc[r] do
      if not u[b[r,i]] then
       dfs(s,b[r,i],l+1);      }

     sz:=1; st[1]:=s; si[1]:=1;
     while sz>0 do
      begin
        if sz>mx then mx:=sz;
        u[st[sz]]:=true;
        fl:=false;
        for i:=si[sz] to bc[st[sz]] do
         if not u[b[st[sz],i]] then
          begin st[sz+1]:=b[st[sz],i]; inc(sz);
                si[sz-1]:=i+1; si[sz]:=1; fl:=true; break; end;
        if not fl then dec(sz);
      end;
   end;

begin
{  assign(t,'trip1.in');
  reset (t);}
  readln ({t,}n,m,k);
  for i:=1 to m do readln({t,}q1[i],q2[i]);
  for i:=1 to k do begin read({t,}l); c[l]:=true; end;
  for i:=1 to m do
   if (not c[q1[i]])and(not c[q2[i]]) then
    begin
      inc(bc[q1[i]]);
      inc(bc[q2[i]]);
      b[q1[i],bc[q1[i]]]:=q2[i];
      b[q2[i],bc[q2[i]]]:=q1[i];
    end;
{  close(t);}

  for i:=1 to n do
   if (not c[i]) then
    begin
      fillchar(u,sizeof(u),false);
      dfs(i,1);
    end;

  writeln(mx);
end.
