def ip():return int(input()) def mp():return map(int, input().split()) def lmp():return list(map(int, input().split())) # 岩プロコン2 E No.3263 違法な散歩道 from collections import deque N, M = mp() edge = [[] for _ in range(N)] for _ in range(M): u, v = map(lambda x:int(x)-1, input().split()) edge[u].append(v) edge[v].append(u) K = ip() A = list(map(lambda x:int(x)-1, input().split())) if K > 0 else [] I = [False] * N for a in A: I[a] = True que = deque() que.append((0, 0)) INF = 10**6 dist = [[INF] * 5 for _ in range(N)] dist[0][0] = 0 while que: v, c = que.popleft() for to in edge[v]: if I[to]: if c == 4: continue if dist[to][c+1] == INF: dist[to][c+1] = dist[v][c] + 1 que.append((to, c+1)) else: if dist[to][0] == INF: dist[to][0] = dist[v][c] + 1 que.append((to, 0)) ans = min(dist[N-1]) print(-1 if ans == INF else ans)