#include <vector>
#include <cstdio>
#include <iostream>
#include <queue>
#include <set>
#include <utility>
#include <cstring>

using namespace std;

const int MAXN = ( 1 << 17 );

int used[MAXN];
int dist[2][MAXN]; // zero is distance from start, one is distance from finish
int N, M, S, T, F;
vector < int > v[MAXN];
vector < int > c[MAXN];
set < pair < int, int > > st;
int path[MAXN];
queue < int > q;

void scan(){
    scanf ( "%d%d%d%d%d", &N, &M, &S, &T, &F );
    
    for ( int i = 0; i < M; ++i ){
        int x, y;
        
        scanf ( "%d%d", &x, &y );
        
        v[x].push_back ( y );
        v[y].push_back ( x );
    }
    
    int last = S;
    
    for ( int i = 0; i < T; ++i ){
        int x;
        scanf ("%d", &x );
        
        st.insert ( make_pair ( last, x ) );
        st.insert ( make_pair ( x, last ) );
        last = x;
    }
}

void bfs ( int idx, int i ){
    dist[idx][i] = 1;
    q.push ( i );
    
    while ( !q.empty() ){
        i = q.front();
        q.pop();
        
        for ( int j = 0; j < (int)v[i].size(); ++j )
            if ( !dist[idx][v[i][j]] ){
                if ( !st.count ( make_pair ( i, v[i][j] ) ) ){
                    dist[idx][v[i][j]] = dist[idx][i] + 1;
                    q.push ( v[i][j] );
                }
            }
    }
}

void solve(){
    bfs ( 0, S );
    bfs ( 1, F );
    memset ( used, 0, sizeof ( used ) );
    if ( dist[0][F] ){
        printf ( "%d\n", dist[0][F] - 1 );
    }
    else{
        printf ( "5\n" );
    }
    
   // findCycles(1, 0);
}

int main(){
    scan();
    solve();
}