#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<ll, int> PA;

int main()
{
  int N, M, K, S;
  int P, Q;
  vector< vector<int> > G(100011);
  cin >> N >> M >> K >> S;
  cin >> P >> Q;
  queue<int> que;
  ll dist[100011] = {0};
  for(int i = 0; i < K; i++){
    int C;
    cin >> C;
    --C;
    que.push(C);
    dist[C] = S + 1;
  }
  G.resize(N + 1);
  for(int i = 0; i < M; i++){
    int A, B;
    cin >> A >> B;
    --A, --B;
    G[A].push_back(B);
    G[B].push_back(A);    
  }
  while(!que.empty()){
    int now = que.front(); que.pop();
    for(int i = 0; i < G[now].size(); i++){
      int to = G[now][i];
      if(dist[to] >= dist[now] - 1) continue;
      dist[to] = dist[now] - 1;
      que.push(to);      
    }
  }
  priority_queue<PA, vector<PA>, greater<PA> > pq;
  ll cost[100011];
  const ll inf = (1LL << 60);
  fill(cost, cost + 100011, inf);
  pq.push(PA(0, 0));
  cost[0] = 0;
  while(!pq.empty()){
    PA p = pq.top(); pq.pop();
    ll now = p.second, c = p.first;
    if(now == N-1){
      if(dist[N-1] > 0) cout << c - Q << endl;
      else cout << c - P << endl;
      break;
    }
    if(cost[now] < c) continue;
    for(int i = 0; i < G[now].size(); i++){
      int to = G[now][i];
      ll ex = (dist[to] > 0 ? Q : P);
      if(dist[to] >= S+1 || cost[to] <= cost[now] + ex) continue;
      cost[to] = cost[now] + ex;
      pq.push(PA(c + ex, to));
    }
  }
  return 0;
}