n, m = gets.split.map(&:to_i) g = Array.new(n) { Array.new() } m.times do u, v = gets.split.map(&:to_i) u -= 1 v -= 1 g[u] << v g[v] << u end k = gets.to_i a = [] if k > 0 then a = gets.split.map(&:to_i) end exist = Array.new(n, false) a.each do |i| exist[i - 1] = true end $MX = 1_000_000_000 dist = Array.new(n) { Array.new(5, $MX) } q = [] dist[0][0] = 0 q << [0, 0] while q.size > 0 v, x = q.shift g[v].each do |nv| nx = x if exist[nv] then nx += 1 else nx = 0 end if nx < 5 && dist[nv][nx] == $MX then dist[nv][nx] = dist[v][x] + 1 q << [nv, nx] end end end ans = $MX (0..4).each do |j| if ans > dist[n - 1][j] then ans = dist[n - 1][j] end end if ans == $MX then ans = -1 end puts ans