/*
TASK:trip
LANG:C
*/
#include <stdio.h>
int n,m;
int c[501]={0},d[1002]={0},g=0;
int br=0;
char used[1002];
int a[1002][1002]={0};
void rez(unsigned i)
{ 
int k, j, p, q[1002], cv, lv, end,f,h;
for (k=0;k<n;k++) q[i]=0;
for (k=0;k<n;k++) used[i]=0;
q[0]=i;  used[i]=1;
cv=0; lv=1; end=1;
while (cv < end) 
      {  
      for (p=cv,br=0;p<lv;p++) 
          {
          for (f=0,h=1;f<m;f++) if  ((q[p]+1)==c[f]) h=0;
          if  (h) br++;
          //intf("%d ", q[p]+1);
          cv++;
          for (j = 0; j < n; j++)
          if (a[q[p]][j] && !used[j]) {
          q[end++] = j;
          used[j] = 1;
          }
    
    }
    d[g]=br;g++;
    lv=end;
    //intf("\n");
  }
}

int main(){
int i,j,k,l,max=0;
//eopen("tst.in","rt",stdin);
//eopen("tst.out","wt",stdout);
scanf("%d%d%d",&n,&k,&m);
for  (i=0;i<k;i++)
     {
     scanf("%d%d",&j,&l);
     a[j-1][l-1]=1;
     a[l-1][j-1]=1;
     }
for (i=0;i<m;i++) scanf("%d",&c[i]);     
rez(0);
max=d[0];
for (i=0;i<g;i++) if  (max<d[i]) max=d[i];
printf("%d\n",max);
return 0;
}

    
