/*
TASK:trip
LANG:C++ 
*/
#include<iostream>
using namespace std;
int a[1005][1005],n,post[1000],d[1005][1005],lng[1005],k;
int used[1005],bmax=0;
void floyd()
{
	int f,i,j;
	for(f=0;f<n;f++)
	{
		for(i=0;i<n;i++)
		{
			for(j=0;j<n;j++)if(i!=j&&j!=f&&i!=f&&a[i][j]>(a[i][f]+a[f][j]))a[i][j]=a[i][f]+a[f][j];
		}
	}
}
void anul()
{
	int i,j;
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)a[i][j]=10000;
	}
	for(i=0;i<n;i++)
	{
		lng[i]=0;
		used[i]=0;
	}
}
void sysed()
{
	int i,j;
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			if(a[i][j]==1)d[i][lng[i]++]=j;
		}
	}
}
int visited(int t)
{
	int i;
	for(i=0;i<k;i++)
	{
		if(post[i]==t)return 1;
	}
	return 0;
}
void dfs(int p,int deep,int tar,int visit)
{
	int i;
	used[p]=1;
	if(deep==0&&p!=tar)return;
	if(deep==0&&p==tar)
	{
		if(visited(p)==0)visit++;
		if(visit>bmax)bmax=visit;
		return;
	}
	for(i=0;i<lng[p];i++)
	{
		if(visited(p)==1)dfs(d[p][i],deep-1,tar,visit);
		else dfs(d[p][i],deep-1,tar,visit+1);
	}
}
int main()
{
	int i,j,m,p,q;
	cin>>n>>m>>k;
	anul();
	for(i=0;i<m;i++)
	{
		cin>>p>>q;
		p--;
		q--;
		a[p][q]=1;
		a[q][p]=1;
	}
	for(i=0;i<k;i++)cin>>post[i];
	floyd();
	sysed();
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			if(i!=j)dfs(i,a[i][j],j,0);
		}
	}
	cout<<bmax-1<<"\n";
	return 0;
}
