{
TASK:trip
LANG:PASCAL
}
var A:array[1..1001,1..1001] of byte;
    i,j,n,m,k,x,y,b,br,max:word;
    s,used:array[1..1001] of word;

procedure DFS(x:word);
var p,i:word;
begin
     if x<>0
        then begin
             inc(br);
             p:=S[x];
             s[x]:=0;
             dec(x);
             for i:=1 to n do
                 if (A[i,p]=1) and (used[i]=0)
                    then begin
                         used[i]:=1;
                         inc(x); S[x]:=i;
                         DFS(x);
                    end;
        end;
end;

begin
     readln(n,m,k);
     for i:=1 to n do
         for j:=1 to n do A[i,j]:=0;

     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 begin
         read(b);
         for j:=1 to n do begin A[j,b]:=0; A[b,j]:=0; end;
     end;
     readln;

if (m=0)
   then writeln(1)
   else begin
     for j:=1 to n do begin A[j,b]:=0; A[b,j]:=0; end;
     for i:=1 to n do used[i]:=0;

     max:=0;
     for i:=1 to n do begin
         if used[i]=0
            then begin
                 br:=0; S[1]:=i; used[i]:=1;
                 DFS(1);
                 if br>max
                    then max:=br;
            end;
     end;

     writeln(max);
   end;
end.
