#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
int n, m, k, s, t;
vector<int> g[N];
int dis[N];
bool spc[N];
bool ok(int lim) {
  priority_queue<pair<int, int> > stk;
  fill_n(dis, n, INT_MAX);
  dis[s] = 0;
  stk.push({-dis[s], s});
  while (!stk.empty()) {
    int d, u;
    tie(d, u) = stk.top();
    stk.pop();
    if (d != -dis[u] || -d >= lim) continue;
    for (auto v : g[u]) {
      if (dis[v] > dis[u] + 1) {
        dis[v] = dis[u] + 1;
        if (spc[v]) dis[v] = 0;
        stk.push({-dis[v], v});
      }
    }
  }
  return dis[t] < INT_MAX;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = (0); i < (k); ++i) {
    int p;
    scanf("%d", &p);
    p--;
    spc[p] = true;
  }
  for (int i = (0); i < (m); ++i) {
    int a, b;
    scanf("%d%d", &a, &b);
    a--;
    b--;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  scanf("%d%d", &s, &t);
  s--;
  t--;
  int ans = -1;
  for (int l = 1, r = n, mid = l + r >> 1; l <= r; mid = l + r >> 1)
    ok(mid) ? r = (ans = mid) - 1 : l = mid + 1;
  printf("%d", ans);
  return 0;
}
