#include <bits/stdc++.h>
int S, T, n, m, l, vol[200020];
int dis[400040], pos[400040], q[400040 * 2];
int E, u[200020], v[200020], go[400040], to[400040];
void AE(int s, int t) {
  to[++E] = t;
  v[s] = u[s] ? go[v[s]] = E : u[s] = E;
}
int spfa(int maxq) {
  register int i, j, k, top, tail;
  memset(dis, 0x7f, sizeof(dis));
  memset(pos, 0, sizeof(pos));
  q[1] = S;
  dis[S] = top = 0;
  pos[S] = tail = 1;
  while (++top <= tail) {
    i = q[top];
    if (dis[i] < maxq)
      for (j = u[i]; j; j = go[j]) {
        int tmp = vol[to[j]] ? 0 : dis[i] + 1;
        if (dis[to[j]] > tmp) {
          dis[to[j]] = tmp;
          if (!pos[to[j]]) {
            q[++tail] = to[j];
            pos[to[j]] = 1;
          }
        }
      }
    pos[i] = 0;
  }
  return dis[T] < 0x7f7f7f7f;
}
int main() {
  register int i, j, k;
  scanf("%d%d%d", &n, &m, &l);
  for (i = 1; i <= l; i++) {
    scanf("%d", &k);
    vol[k] = 1;
  }
  for (i = 1; i <= m; i++) {
    scanf("%d%d", &j, &k);
    AE(j, k);
    AE(k, j);
  }
  scanf("%d%d", &S, &T);
  int l = 1, r = n, m, ans = -1;
  while (l <= r) {
    m = l + r + 1 >> 1;
    if (spfa(m)) {
      ans = m;
      r = m - 1;
    } else
      l = m + 1;
  }
  printf("%d\n", ans < 0 ? -1 : ans);
  return 0;
}
