import java.util.*


enum class State{
    Occupied, Danger, Safe
}
fun main(args:Array<String>): Unit {
    val (n, m, k, s) = readLine()!!.trim().split(' ').map(String::toInt)
    val (p, q) = readLine()!!.trim().split(' ').map(String::toInt)
    val routes = Array(n){Stack<Int>()}
    val towns = Array(n){State.Safe}
    val queue: Queue<Int> = LinkedList()
    repeat(k){
        val c = readLine()!!.toInt() - 1
        towns[c] = State.Occupied
        queue.add(c)
    }
    repeat(m){
        val (a, b) = readLine()!!.trim().split(' ').map{it.toInt() - 1}
        routes[a].push(b)
        routes[b].push(a)
    }
    repeat(s){
        repeat(queue.size){
            for (next in routes[queue.poll()]){
                if (towns[next] == State.Safe){
                    towns[next] = State.Danger
                    queue.add(next)
                }
            }
        }
    }
    val memo = Array(n){Long.MAX_VALUE}.apply{this[0] = 0}
    val priorityQueue = PriorityQueue<Pair<Long, Int>>(compareBy(Pair<Long, Int>::first)).apply{add(0L to 0)}
    while (priorityQueue.peek().second != n - 1){
        val (cost, town) = priorityQueue.poll()
        if (memo[town] == cost){
            for (next in routes[town]){
                when(towns[next]){
                    State.Safe ->
                        if (memo[next] > cost + p){
                            memo[next] = cost + p
                            priorityQueue.add(memo[next] to next)
                        }
                    State.Danger ->
                        if (memo[next] > cost + q){
                            memo[next] = cost + q
                            priorityQueue.add(memo[next] to next)
                        }
                    State.Occupied -> Unit
                }
            }
        }
    }
    println(priorityQueue.peek().first - if (towns.last() == State.Safe) p else q)
}
