#include <bits/stdc++.h>
using namespace std;
bool debug_cerr = false;
long long POW(long long x, long long y);
long long mf(long long x, long long mod);
long long mi(long long x, long long mod);
long long C(long long x, long long y, long long mod);
long long bpow(long long x, long long y, long long mod);
long long POW(long long x, long long y) { return bpow(x, y, LONG_LONG_MAX); }
long long mf(long long x, long long mod = 1000000007) {
  if (x < 2) return 1;
  return (x * mf(x - 1, mod)) % mod;
}
long long mi(long long x, long long mod = 1000000007) {
  return bpow(x, mod - 2, mod);
}
long long C(long long x, long long y, long long mod = 1000000007) {
  if (x < y) return 0;
  long long n1 = mf(x, mod);
  long long n2 = mi(mf(y, mod), mod);
  long long n3 = mi(mf(x - y, mod), mod);
  long long res = (n1 * n2) % mod;
  res = (res * n3) % mod;
  return res;
}
long long bpow(long long x, long long y, long long mod = 1000000007) {
  x %= mod;
  long long res = 1;
  while (y > 0) {
    if (y & 1) {
      res = res * x % mod;
    }
    x = x * x % mod;
    y >>= 1;
  }
  return res;
}
vector<vector<long long>> adj(200005), d(2), vis(2);
vector<long long> sp;
void bfs(long long v, long long rep) {
  queue<long long> q;
  q.push(v);
  vis[rep][v] = 1;
  d[rep][v] = 0;
  while (!q.empty()) {
    long long x = q.front();
    q.pop();
    for (auto it : adj[x]) {
      if (!vis[rep][it]) {
        q.push(it);
        d[rep][it] = d[rep][x] + 1;
        vis[rep][it] = 1;
      }
    }
  }
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  long long n, m, k;
  cin >> n >> m >> k;
  sp = d[0] = d[1] = vis[0] = vis[1] = vector<long long>(n, 0);
  for (long long i = 0; i < k; i++) {
    long long x;
    cin >> x;
    x--;
    sp[x] = 1;
  }
  for (long long i = 0; i < m; i++) {
    long long u, v;
    cin >> u >> v;
    u--;
    v--;
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  bfs(0, 0);
  bfs(n - 1, 1);
  long long ans = d[0][n - 1];
  pair<long long, long long> ar[k];
  long long j = 0;
  for (long long i = 0; i < n; i++) {
    if (sp[i]) {
      ar[j] = {d[0][i] - d[1][i], i};
      j++;
    }
  }
  sort(ar, ar + k);
  long long sm[k];
  sm[k - 1] = d[1][ar[k - 1].second];
  for (long long i = k - 1 - 1; i >= 0; i--) {
    sm[i] = max(sm[i + 1], d[1][ar[i].second]);
  }
  long long cur = 0;
  for (long long i = 0; i < k - 1; i++) {
    cur = max(cur, d[0][ar[i].second] + sm[i + 1] + 1);
  }
  ans = min(ans, cur);
  cout << ans;
}
