#include using namespace std; #define rep(i, n) for (int i = 0; i < (int)(n); i++) using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll n, m; cin >> n >> m; vector> G(n); rep(i, m) { ll u, v; cin >> u >> v; --u; --v; G[u].push_back(v); G[v].push_back(u); } ll k; cin >> k; set bad; rep(i, k) { ll a; cin >> a; bad.insert(a - 1); } vector>> D(n, vector>(5, {LLONG_MAX, -1, -1})); D[0][0] = {0, -1, -1}; queue> q; q.push({0, 0}); while (!q.empty()) { auto [v, b] = q.front(); q.pop(); ll dist = D[v][b][0]; for (ll to : G[v]) { if (bad.count(to)) { if (b < 4 && D[to][b+1][0] > dist + 1) { D[to][b+1] = {dist + 1, v, b}; q.push({to, b+1}); } } else { if (D[to][0][0] > dist + 1) { D[to][0] = {dist + 1, v, b}; q.push({to, 0}); } } } } ll ans = LLONG_MAX; for (int b = 0; b < 5; ++b) ans = min(ans, D[n-1][b][0]); cout << (ans == LLONG_MAX ? -1 : ans) << '\n'; }