#include using namespace std; int main() { const int INF = 1 << 30; int N, M; cin >> N >> M; vector> G(N); for (int i = 0; i < M; i++) { int U, V; cin >> U >> V; U--, V--; G[U].push_back(V), G[V].push_back(U); } int K; cin >> K; vector iwai(N); for (int i = 0; i < K; i++) { int A; cin >> A; A--; iwai[A] = true; } vector> dis(N, vector(5, INF)); queue> q; dis[0][0] = 0; q.emplace(0, 0); while (!q.empty()) { auto[v, t] = q.front(); q.pop(); for (int nv: G[v]) { if (iwai[nv]) { if (t <= 3 && dis[nv][t + 1] == INF) { dis[nv][t + 1] = dis[v][t] + 1; q.emplace(nv, t + 1); } } else { if (dis[nv][0] == INF) { dis[nv][0] = dis[v][t] + 1; q.emplace(nv, 0); } } } } if (*min_element(dis[N - 1].begin(), dis[N - 1].end()) == INF) { cout << -1 << endl; } else { cout << *min_element(dis[N - 1].begin(), dis[N - 1].end()) << endl; } return 0; }