← Home
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()
}