def IM(): return map(int, input().split()) N, M = IM() G = [[] for _ in range(5*N)] nodes = [] for _ in range(M): u, v = IM() u -= 1 v -= 1 nodes.append((u, v)) C = int(input()) if C: A = set(IM()) else: A = set() for i in range(M): u, v = nodes[i] if u+1 in A: for j in range(4): G[N*j+v].append(N*(j+1)+u) else: for j in range(5): G[N*j+v].append(u) if v+1 in A: for j in range(4): G[N*j+u].append(N*(j+1)+v) else: for j in range(5): G[N*j+u].append(v) # 各頂点が何手目に探索されたか # -1 は「まだ探索されていない」ことを表す dist = [-1] * (5*N) # k 手目に探索された頂点集合を格納 (最大でも N-1 手まで) nodes = [[] for i in range(5*N)] # 頂点 0 を始点とする dist[0] = 0 nodes[0] = [0] # k 手目の探索をする for k in range(1, 5*N): # k-1 手目に探索された各頂点 v に対して for v in nodes[k - 1]: # 頂点 v から 1 手で行ける頂点 next_v を探索 for next_v in G[v]: # 頂点 next_v が探索済みであれば何もしない if dist[next_v] != -1: continue # 頂点 next_v を探索する dist[next_v] = dist[v] + 1 nodes[k].append(next_v) #print(dist) ans = 10**18 for i in range(5): if dist[N*i+N-1] != -1: ans = min(ans, dist[N*i+N-1]) print(ans if ans != 10**18 else -1)