import std.algorithm;
import std.array;
import std.ascii;
import std.container;
import std.conv;
import std.math;
import std.numeric;
import std.range;
import std.stdio;
import std.string;
import std.typecons;

void log(A...)(A arg) {
    stderr.writeln(arg);
}
int size(T)(in T s) {
    return cast(int)s.length;
}

const int INF = 1<<28;

void main() {
    int N, M, K, S; scanf("%d %d %d %d\n", &N, &M, &K, &S);
    long P, Q; scanf("%d %d\n", &P, &Q);
    auto C = new int[K];
    foreach (i; 0 .. K) {
        scanf("%d\n", &C[i]);
        C[i]--;
    }
    auto G = new int[][N];
    foreach (i; 0 .. M) {
        int A, B; scanf("%d %d\n", &A, &B);
        A--; B--;
        G[A] ~= B;
        G[B] ~= A;
    }
    auto D = new int[N]; D[] = INF;
    DList!(Tuple!(int, int)) q;
    foreach (c; C) {
        q.insert(tuple(c, 0));
        D[c] = 0;
    }
    while (! q.empty) {
        auto c = q.front; q.removeFront;
        foreach (next; G[c[0]]) {
            if (D[next] > c[1] + 1) {
                D[next] = c[1] + 1;
                q.insert(tuple(next, c[1] + 1));
            }
        }
    }

    auto X = new long[N]; X[] = 1L<<56; X[0] = 0;
    alias T = Tuple!(int, "v", long, "cost");
    BinaryHeap!(Array!T, "a.cost > b.cost") PQ;
    PQ.insert(T(0, 0));
    while (! PQ.empty) {
        auto c = PQ.front; PQ.removeFront;
        foreach (next; G[c.v]) {
            if (D[next] == 0) continue;
            long cost = (D[next] <= S ? Q : P);
            long ncost = cost + c.cost;
            if (X[next] > ncost) {
                X[next] = ncost;
                PQ.insert(T(next, ncost));
            }
        }
    }

    writeln(X[N - 1] - (D[N - 1] <= S ? Q : P));
}