#include using namespace std; using ll = long long; #define rep(i, n) for (int i = 0; i < (ll)(n); i++) #define oke cout << "Yes" << '\n'; #define dame cout << "No" << '\n'; #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() using HaiI = vector>; using Hai2 = vector>; using HaiB = vector>; using Hai3 = vector>>; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout << fixed << setprecision(15); ll N,M; cin>>N>>M; Hai2 G(N); rep(i,M){ int a,b; cin>>a>>b; a--,b--; G[a].push_back(b); G[b].push_back(a); } ll K; cin>>K; setA; rep(i,K){ int a; cin>>a; a--; A.insert(a); } queue>Q; Hai2 dist(N,vector(5,1e9)); Q.push({0,0}); dist[0][0]=0; while(!Q.empty()){ int h,v; tie(v,h)=Q.front(); Q.pop(); for(int x:G[v]){ if(A.count(x)){ if(h==4) continue; if(dist[x][h+1] > dist[v][h]+1){ dist[x][h+1]=dist[v][h]+1; Q.push({x,h+1}); } }else{ if(dist[x][0] > dist[v][h]+1){ dist[x][0]=dist[v][h]+1; Q.push({x,0}); } } } } ll ans=1e9; rep(i,5){ ans=min(ans,dist[N-1][i]); } if(ans==1e9) ans=-1; cout<