#include <bits/stdc++.h>
using namespace std;
int n, m, k;
bool volontaire[100001];
vector<int> voisins[100001];
bool visited[100001];
int meilleur[100001];
vector<int> front, newfront;
int s, t;
const int INF = 1000000000;
int explore(int x, int ans) {
  int i, j;
  if (x == t) return 1;
  for (i = 0; i < voisins[x].size(); i++) {
    j = voisins[x][i];
    if (j == t) return 1;
    if (!visited[j] || meilleur[j] > meilleur[x] + 1) {
      meilleur[j] = meilleur[x] + 1;
      if (volontaire[j] && !visited[j]) {
        visited[j] = true;
        meilleur[j] = 0;
        if (explore(j, ans)) return 1;
      } else if (meilleur[x] == ans - 1) {
        visited[j] = true;
        newfront.push_back(j);
      } else {
        visited[j] = true;
        if (explore(j, ans)) return 1;
      }
    }
  }
  return 0;
}
int main() {
  int i, j, a, b;
  int ans;
  cin >> n >> m >> k;
  for (i = 1; i <= n; i++) {
    volontaire[i] = false;
    visited[i] = false;
    meilleur[i] = INF;
  }
  for (i = 0; i < k; i++) {
    cin >> j;
    volontaire[j] = true;
  }
  for (i = 0; i < m; i++) {
    cin >> a >> b;
    voisins[a].push_back(b);
    voisins[b].push_back(a);
  }
  cin >> s >> t;
  if (s == t)
    printf("0\n");
  else {
    visited[s] = true;
    meilleur[s] = 0;
    front.push_back(s);
    for (ans = 1;; ans++) {
      if (front.size() == 0) {
        printf("-1\n");
        return 0;
      }
      for (i = 0; i < front.size(); i++) {
        a = front[i];
        if (meilleur[a] == ans - 1) {
          if (explore(a, ans)) {
            printf("%d\n", ans);
            return 0;
          }
        }
      }
      front.clear();
      for (i = 0; i < newfront.size(); i++) {
        if (meilleur[newfront[i]] == ans) front.push_back(newfront[i]);
      }
      newfront.clear();
    }
  }
  return 0;
}
