#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef unsigned __int128 HASH;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;
typedef pair<ull, ull> pullull;
typedef pair<ll,int> plli;
typedef pair<double, int> pdbi;
typedef pair<int,pii> pipii;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<vi> vvi;
typedef vector<vvi> vvvi;
typedef vector<pii> vpii;
typedef vector<vector<int>> mat;

#define rep(i,n) for (int i=0;i<(n);i++)
#define rep2(i,a,b) for (int i=(a);i<(b);i++)
#define rrep(i,n) for (int i=(n);i>0;i--)
#define rrep2(i,a,b) for (int i=(a);i>b;i--)
#define pb push_back
#define fi first
#define se second
#define all(a) (a).begin(),(a).end()
#define rall(a) (a).rbegin(),(a).rend()

const ll hmod1 = 999999937;
const ll hmod2 = 1000000000 + 9;
const ll INF = 1<<30;
const ll mod = 10000 + 7;
const int dx4[4] = {1, 0, -1, 0};
const int dy4[4] = {0, 1, 0, -1};
const int dx8[8] = {1, 1, 1, 0, 0, -1, -1, -1};
const int dy8[8] = {0, 1, -1, 1, -1, 0, 1, -1};
const double pi = 3.141592653589793;

//#define int long long
#define addm(X, Y) (X) = ((X) + ((Y) % mod) + mod) % mod


int n, m, k, s;
int p, q;
int a[200000 + 5], b[200000 + 5];
struct edge {int cost, to;};
vector<vector<int>> tmpg(100000 + 5);
vector<vector<edge>> g(100000 + 5);
int dist[100000 + 5];
bool ng[100000 + 5];
bool visited[100000 + 5];

vector<ll> dijkstra(int s, int n, vector<vector<edge>>& g){
    priority_queue<plli, vector<plli>, greater<plli>> pque;
    vector<ll> d(n, LLONG_MAX / 10); d[s] = 0;
    pque.push(plli(0, s));

    while (!pque.empty()){
        plli p = pque.top(); pque.pop();
        int fr = p.second;
        if (d[fr] < p.first) continue;
        for (edge e: g[fr]){
            int cost = e.cost;
            if (ng[e.to]) continue;
            if (e.to == n - 1) cost = 0;
            if (d[e.to] > d[fr] + cost){
                d[e.to] = d[fr] + cost;
                pque.push(plli(d[e.to], e.to));
            }
        }
    }
    return d;
}


signed main(){
    cin.tie(0);
    ios::sync_with_stdio(false);
    cin >> n >> m >> k >> s;
    cin >> p >> q;
    rep(i, k) {
        int c;
        cin >> c;
        c--;
        ng[c] = true;
        tmpg[n].push_back(c);
    }
    rep(i, m) {
        cin >> a[i] >> b[i];
        a[i]--; b[i]--;
        tmpg[a[i]].push_back(b[i]);
        tmpg[b[i]].push_back(a[i]);
    }

    queue<int> que;
    que.push(n);
    while (!que.empty()) {
        int now = que.front(); que.pop();
        visited[now] = true;
        for (auto nx : tmpg[now]) {
            if (visited[nx] || dist[now] == s + 1) continue;
            visited[nx] = true;
            dist[nx] = dist[now] + 1;
            que.push(nx);
        }
    }
    
    rep(i, m) {
        int u = a[i];
        int v = b[i];
        if (visited[u]) {
            g[v].push_back(edge{q, u});
            if (visited[v]) g[u].push_back(edge{q, v});
            else g[u].push_back(edge{p, v});
        }
        else {
            g[v].push_back(edge{p, u});
            if (visited[v]) g[u].push_back(edge{q, v});
            else g[u].push_back(edge{p, v});
        }
    }

    vector<ll> ans = dijkstra(0, n, g);
    cout << ans[n - 1] << endl;
}

Measured memory_bytes: 20808