#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int n, m, k, a[N];
int q[N], d1[N], d2[N];
vector<int> e[N];
void SSSP(int S, int *d) {
  for (int i = (int)(1); i <= (int)(n); i++) d[i] = -1;
  int h = 0, t = 1;
  q[1] = S;
  d[S] = 0;
  while (h != t) {
    int x = q[++h];
    for (auto i : e[x])
      if (d[i] == -1) {
        q[++t] = i;
        d[i] = d[x] + 1;
      }
  }
}
bool cmp(int x, int y) { return d1[x] - d1[y] < d2[x] - d2[y]; }
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = (int)(1); i <= (int)(k); i++) scanf("%d", &a[i]);
  for (int i = (int)(1); i <= (int)(m); i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    e[x].push_back(y);
    e[y].push_back(x);
  }
  SSSP(1, d1);
  SSSP(n, d2);
  sort(a + 1, a + k + 1, cmp);
  int mx = -(1 << 30), ans = 0;
  for (int i = (int)(1); i <= (int)(k); i++) {
    ans = max(ans, mx + d2[a[i]]);
    mx = max(mx, d1[a[i]]);
  }
  mx = -(1 << 30);
  for (int i = (int)(k); i >= (int)(1); i--) {
    ans = max(ans, mx + d1[a[i]]);
    mx = max(mx, d2[a[i]]);
  }
  printf("%d\n", min(ans + 1, d1[n]));
}
