{
TASK:trip
LANG:PASCAL
}

Const
 Lim = 1005;

Var
 N, M, K, Cnt, C1, C2, P, Q, Max, MaxA, MaxB : Word;
 A  : Array[1..Lim, 1..Lim] of Byte; {ots}
 U  : Array[1..Lim] of Byte;         {used}
 B  : Array[1..Lim, 1..Lim] of Byte; {nep}
 Ln : Array[1..Lim, 1..Lim] of Word; {len}
 Cl : Array[1..Lim, 1..Lim] of Byte; {clc}
 XX : Array[1..Lim] of Byte;         {pos}
 Sr : Array[1..Lim, 1..Lim] of Byte; {fnd}

Procedure F(X, Y : Word);
var
 Cn : Word;
 np : Word;
 L  : Word;

Begin
 If Cl[X, Y]=1 then Exit;
 If X=Y then
 Begin
  If XX[X]=0 then np := 1 else np := 0;
  B [X, X] := np;
  Ln[X, X] := 0;
  Cl[X, X] := 1;
  Exit;
 end;

 np := 65535; L := 65535;
 U[X] := 1;
 For Cn := {1}Sr[X, Y] + 1 to N do {If (U[Cn]=0) then} If A[X, Cn]=1 then
 Begin
  Sr[X, Y] := Cn;
  F(Cn, Y);
  {If Cl[Cn, Y]=0 then WriteLn('!!!');}

  If (Ln[Cn, Y] < L) or ((Ln[Cn, Y] = L) and (B[Cn, Y]<np)) then
  Begin
   L := Ln[Cn, Y];
   np := B[Cn, Y];
  end;
 end;
 U[X] := 0;
 {}Sr[X, Y] := 0;

 If XX[X]=0 then inc(np);
 B [X, Y] := np;
 B [Y, X] := np;
 Ln[X, Y] := L+1;
 Ln[Y, X] := L+1;
 Cl[X, Y] := 1;
 Cl[Y, X] := 1;

 {If np > Max then Max := np;}
end;

Begin
 FillChar(A, SizeOf(A), 0);
 FillChar(U, SizeOf(U), 0);
 FillChar(B, SizeOf(B), 0);
 FillChar(Ln, SizeOf(Ln), 0);
 FillChar(Cl, SizeOf(Cl), 0);
 FillChar(XX, SizeOf(XX), 0);
 FillChar(Sr, SizeOf(Sr), 0);

 ReadLn(N, M, K);
 For Cnt := 1 to M do
 Begin
  ReadLn(P, Q);
  A[P, Q] := 1;
  A[Q, P] := 1;
 end;
 For Cnt := 1 to K do
 Begin
  Read(XX[Cnt]); {ReadLn;}
 end;

 For C1 := 1 to N do For C2 := C1+1 to N do
 {C1 := 4; C2 := 5;}
 Begin
  F(C1, C2);
  If B[C1, C2] > Max then
  Begin
   Max := B[C1, C2];
   MaxA := C1;
   MaxB := C2;
  end;
 end;

 WriteLn(Max);
 {WriteLn(MaxA, ' ', MaxB);}

 {Halt(0);}
end.
