#include<bits/stdc++.h> usingnamespace std; #define ll long long typedef pair<int, int> pii; constint INF = 0x3f3f3f3f; constint N = 2e5 + 10; int n, m, k; int red[N]; vector<int>G[N]; int d1[N], d2[N]; voidbfs(int s, int* d){ fill(d, d + n + 1, -1); queue<int>que; que.push(s); d[s] = 0; while (!que.empty()) { int u = que.front(); que.pop(); for (int v : G[u]) { if (d[v] == -1) { d[v] = d[u] + 1; que.push(v); } } } } vector<int>vc2; intmain(){ scanf("%d%d%d", &n, &m, &k); for (int i = 0; i < k; i++) { scanf("%d", &red[i]); } for (int i = 0; i < m; i++) { int u, v; scanf("%d%d", &u, &v); G[u].push_back(v); G[v].push_back(u); } bfs(1, d1); bfs(n, d2); for (int i = 0; i < k; i++) { vc2.push_back(d2[red[i]]); } sort(vc2.begin(), vc2.end()); int tmp = d1[n], ans = -1; for (int i = 0; i < k; i++) { auto pos = upper_bound(vc2.begin(), vc2.end(), d2[red[i]]); --pos; if (pos == vc2.begin())continue; --pos; if ((*pos) + d1[red[i]] + 1 >= tmp) { ans = tmp; break; } ans = max(ans, (*pos) + d1[red[i]] + 1); } printf("%d\n", ans); return0; }