package main
import (
"bufio"
"io"
"os"
"sort"
"strconv"
)
func bfs(start int, g [][]int) []int {
n := len(g) - 1
dist := make([]int, n+1)
for i := 0; i <= n; i++ {
dist[i] = -1
}
q := make([]int, n)
head, tail := 0, 0
q[tail] = start
tail++
dist[start] = 0
for head < tail {
v := q[head]
head++
nd := dist[v] + 1
for _, to := range g[v] {
if dist[to] == -1 {
dist[to] = nd
q[tail] = to
tail++
}
}
}
return dist
}
func main() {
data, _ := io.ReadAll(os.Stdin)
idx := 0
nextInt := func() int {
for idx < len(data) && (data[idx] < '0' || data[idx] > '9') {
idx++
}
val := 0
for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
val = val*10 + int(data[idx]-'0')
idx++
}
return val
}
n, m, k := nextInt(), nextInt(), nextInt()
special := make([]int, k)
for i := 0; i < k; i++ {
special[i] = nextInt()
}
g := make([][]int, n+1)
for i := 0; i < m; i++ {
u, v := nextInt(), nextInt()
g[u] = append(g[u], v)
g[v] = append(g[v], u)
}
d1 := bfs(1, g)
dn := bfs(n, g)
sort.Slice(special, func(i, j int) bool {
return d1[special[i]]-dn[special[i]] < d1[special[j]]-dn[special[j]]
})
best := 0
maxD1 := -1
for _, s := range special {
if maxD1 != -1 {
cand := maxD1 + dn[s] + 1
if cand > best {
best = cand
}
}
if d1[s] > maxD1 {
maxD1 = d1[s]
}
}
ans := d1[n]
if best < ans {
ans = best
}
out := bufio.NewWriter(os.Stdout)
out.WriteString(strconv.Itoa(ans))
out.WriteByte('\n')
out.Flush()
}