/*
TASK:trip
LANG:C++
*/

#include<iostream.h>
// const int maxn=101;
 int **a,*stack,*K,n,k;
 char *used;
 int bfs(int s);

 int main()
 {
  int m,i,A,b,max;
  cin>>n>>m>>k;
  K=new int [k];
  stack=new int [n];
  used=new char [n];
  a=new int *[n];
  for(i=0;i<n;i++)a[i]=new int [n];
  for(i=0;i<n;i++)
   for(max=0;max<n;max++)
    a[i][max]=0;
  max=0;
  for(i=0;i<m;i++)
  {
   cin>>A>>b; A--; b--; a[A][b]=a[b][A]=1;
  }
  for(i=0;i<k;i++)
   cin>>K[i];
  for(i=0;i<n;i++)
  {
   m=bfs(i);
   if(m>max)max=m;
  }
  cout<<max<<endl;
  delete K; delete stack; delete used; delete a;
  return 0;
 }


 int bfs(int s)
 {
  int b,e=1,c=1,i,g,d[1001];
  stack[b=0]=s;
  for(i=0;i<n;i++)d[i]=0;
//  d[s]=0;
  for(i=0;i<n;i++)used[i]=0;
  used[s]=1;
  while(b<e)
  {
   for(;b<e;b++)
   {
    for(i=0;i<n;i++)
     if(!used[i] && a[stack[b]][i]){
     stack[c++]=i;
     g=0;
     used[i]=1;
     while(g<k && i!=K[g]-1)g++;
     if(g==k)d[i]=d[stack[b]]+1;
      else d[i]=d[stack[b]];
     }
   }
   e=c;
  }
  for(c=d[0],i=1;i<n;i++)
   if(c<d[i])c=d[i];
  return c;
 }