#include<stdio.h>
#include<queue>
#include<algorithm>
#define it register int
#define ct const int
#define il inline
using namespace std;
const int N=1000005;
const long long inf=1e18;
typedef long long ll;
int h[N],nxt[N],adj[N],w[N],a[N],p[N],p2[N],u,v,x,n,m,t,T,k,mindis,mx;
ll d[N],d2[N],ans;
bool inq[N];
struct ky{
int u;ll v;
bool operator<(const ky&p)const{
return v>p.v;
}
};
priority_queue<ky> q;
il void add(){nxt[++t]=h[u],h[u]=t,adj[t]=v,nxt[++t]=h[v],h[v]=t,adj[t]=u;}
il void dij(ct s){
for(it i=1;i<=n;++i) d[i]=inf,inq[i]=0;
q.push((ky){s,0}),d[s]=0;
register ky top;
while(!q.empty()){
top=q.top();q.pop();
if(inq[top.u]) continue;
inq[top.u]=true;
for(it i=h[top.u];i;i=nxt[i])
if(d[adj[i]]>top.v+1)
d[adj[i]]=top.v+1,q.push((ky){adj[i],d[adj[i]]});
}
}
il ll Min(ll p,ll q){return p<q?p:q;}
il ll Max(ll p,ll q){return p>q?p:q;}
namespace io{
il char nc(){
static char buf[100000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
template <class I>
il void fr(I &num){
num=0;register char c=nc();it p=1;
while(c<'0'||c>'9') c=='-'?p=-1,c=nc():c=nc();
while(c>='0'&&c<='9') num=num*10+c-'0',c=nc();
num*=p;
}
}
using io :: fr;
struct kyl{
ll d1,d2;
}c[N];
il bool cmp(kyl p,kyl q){return p.d1<q.d1||(p.d1==q.d1&&p.d2<q.d2);}
int main(){
fr(n),fr(m),fr(k);it i;
for(i=1;i<=k;++i) fr(a[i]);
for(i=1;i<=m;++i) fr(u),fr(v),add();
dij(n);for(i=1;i<=n;++i) d2[i]=d[i];
dij(1);mindis=d[n],mx=0;
for(i=1;i<=k;++i) c[i]=(kyl){d[a[i]],d2[a[i]]};
std::sort(c+1,c+1+k,cmp);
//for(i=1;i<=k;++i) printf("%lld %lld\n",c[i].d1,c[i].d2);
mx=c[k].d2;
for(i=k-1;i;--i)
ans=Max(ans,Min(mx,c[i].d2)+c[i].d1+1),mx=Max(c[i].d2,mx);
printf("%lld",Min(ans,mindis));
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8cXVldWU+CiNpbmNsdWRlPGFsZ29yaXRobT4KI2RlZmluZSBpdCByZWdpc3RlciBpbnQKI2RlZmluZSBjdCBjb25zdCBpbnQgCiNkZWZpbmUgaWwgaW5saW5lCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBOPTEwMDAwMDU7CmNvbnN0IGxvbmcgbG9uZyBpbmY9MWUxODsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CmludCBoW05dLG54dFtOXSxhZGpbTl0sd1tOXSxhW05dLHBbTl0scDJbTl0sdSx2LHgsbixtLHQsVCxrLG1pbmRpcyxteDsKbGwgZFtOXSxkMltOXSxhbnM7CmJvb2wgaW5xW05dOwpzdHJ1Y3Qga3l7CglpbnQgdTtsbCB2OwoJYm9vbCBvcGVyYXRvcjwoY29uc3Qga3kmcCljb25zdHsKCQlyZXR1cm4gdj5wLnY7Cgl9Cn07CnByaW9yaXR5X3F1ZXVlPGt5PiBxOwppbCB2b2lkIGFkZCgpe254dFsrK3RdPWhbdV0saFt1XT10LGFkalt0XT12LG54dFsrK3RdPWhbdl0saFt2XT10LGFkalt0XT11O30KaWwgdm9pZCBkaWooY3Qgcyl7Cglmb3IoaXQgaT0xO2k8PW47KytpKSBkW2ldPWluZixpbnFbaV09MDsKCXEucHVzaCgoa3kpe3MsMH0pLGRbc109MDsKCXJlZ2lzdGVyIGt5IHRvcDsKCXdoaWxlKCFxLmVtcHR5KCkpewoJCXRvcD1xLnRvcCgpO3EucG9wKCk7CgkJaWYoaW5xW3RvcC51XSkgY29udGludWU7CgkJaW5xW3RvcC51XT10cnVlOwoJCWZvcihpdCBpPWhbdG9wLnVdO2k7aT1ueHRbaV0pCgkJCWlmKGRbYWRqW2ldXT50b3AudisxKQoJCQkJZFthZGpbaV1dPXRvcC52KzEscS5wdXNoKChreSl7YWRqW2ldLGRbYWRqW2ldXX0pOwoJfQp9CmlsIGxsIE1pbihsbCBwLGxsIHEpe3JldHVybiBwPHE/cDpxO30KaWwgbGwgTWF4KGxsIHAsbGwgcSl7cmV0dXJuIHA+cT9wOnE7fQpuYW1lc3BhY2UgaW97CglpbCBjaGFyIG5jKCl7CgkJc3RhdGljIGNoYXIgYnVmWzEwMDAwMF0sKnAxPWJ1ZiwqcDI9YnVmOwoJCXJldHVybiBwMT09cDImJihwMj0ocDE9YnVmKStmcmVhZChidWYsMSwxMDAwMDAsc3RkaW4pLHAxPT1wMik/RU9GOipwMSsrOyAKCX0KCXRlbXBsYXRlIDxjbGFzcyBJPiAKCWlsIHZvaWQgZnIoSSAmbnVtKXsKCQludW09MDtyZWdpc3RlciBjaGFyIGM9bmMoKTtpdCBwPTE7CgkJd2hpbGUoYzwnMCd8fGM+JzknKSBjPT0nLSc/cD0tMSxjPW5jKCk6Yz1uYygpOwoJCXdoaWxlKGM+PScwJyYmYzw9JzknKSBudW09bnVtKjEwK2MtJzAnLGM9bmMoKTsKCQludW0qPXA7Cgl9IAp9CnVzaW5nIGlvIDo6IGZyOwpzdHJ1Y3Qga3lsewoJbGwgZDEsZDI7Cn1jW05dOwppbCBib29sIGNtcChreWwgcCxreWwgcSl7cmV0dXJuIHAuZDE8cS5kMXx8KHAuZDE9PXEuZDEmJnAuZDI8cS5kMik7fQppbnQgbWFpbigpewoJZnIobiksZnIobSksZnIoayk7aXQgaTsKCWZvcihpPTE7aTw9azsrK2kpIGZyKGFbaV0pOwoJZm9yKGk9MTtpPD1tOysraSkgZnIodSksZnIodiksYWRkKCk7CglkaWoobik7Zm9yKGk9MTtpPD1uOysraSkgZDJbaV09ZFtpXTsKCWRpaigxKTttaW5kaXM9ZFtuXSxteD0wOwoJZm9yKGk9MTtpPD1rOysraSkgY1tpXT0oa3lsKXtkW2FbaV1dLGQyW2FbaV1dfTsKCXN0ZDo6c29ydChjKzEsYysxK2ssY21wKTsKCS8vZm9yKGk9MTtpPD1rOysraSkgcHJpbnRmKCIlbGxkICVsbGRcbiIsY1tpXS5kMSxjW2ldLmQyKTsKCW14PWNba10uZDI7Cglmb3IoaT1rLTE7aTstLWkpCgkJYW5zPU1heChhbnMsTWluKG14LGNbaV0uZDIpK2NbaV0uZDErMSksbXg9TWF4KGNbaV0uZDIsbXgpOwoJcHJpbnRmKCIlbGxkIixNaW4oYW5zLG1pbmRpcykpOwoJcmV0dXJuIDA7Cn0K