/* template.cpp [[[ */
#include <bits/stdc++.h>
using namespace std;
#define get_macro(a, b, c, d, name, ...) name
#define rep(...) get_macro(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__)
#define rrep(...) get_macro(__VA_ARGS__, rrep4, rrep3, rrep2, rrep1)(__VA_ARGS__)
#define rep1(n) rep2(i_, n)
#define rep2(i, n) rep3(i, 0, n)
#define rep3(i, a, b) rep4(i, a, b, 1)
#define rep4(i, a, b, s) for (ll i = (a); i < (ll)(b); i += (ll)s)
#define rrep1(n) rrep2(i_, n)
#define rrep2(i, n) rrep3(i, 0, n)
#define rrep3(i, a, b) rrep4(i, a, b, 1)
#define rrep4(i, a, b, s) for (ll i = (ll)(b) - 1; i >= (ll)(a); i -= (ll)s)
#define each(x, c) for (auto &&x : c)
#define fs first
#define sc second
#define all(c) begin(c), end(c)
using ui = unsigned;
using ll = long long;
using ul = unsigned long long;
using ld = long double;
const int inf = 1e9 + 10;
const ll inf_ll = 1e18 + 10;
const ll mod = 1e9 + 7;
const ll mod9 = 1e9 + 9;
const int dx[]{-1, 0, 1, 0, -1, 1, 1, -1};
const int dy[]{0, -1, 0, 1, -1, -1, 1, 1};
template<class T, class U> void chmin(T &x, const U &y){ x = min<T>(x, y); }
template<class T, class U> void chmax(T &x, const U &y){ x = max<T>(x, y); }
struct prepare_ { prepare_(){ cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(12); } } prepare__;
/* ]]] */

int n, m, k, s;
int p, q;
int x[100000];
ll c[100000];
vector<int> g[100000];
ll d[100000];

int main(){
  cin >> n >> m >> k >> s;
  cin >> p >> q;
  rep(i, k) cin >> x[i];
  rep(i, m){
    int a, b;
    cin >> a >> b;
    g[a - 1].push_back(b - 1);
    g[b - 1].push_back(a - 1);
  }

  fill_n(d, 100000, inf_ll);
  queue<int> qu;
  rep(i, k){
    d[x[i] - 1] = 0;
    qu.push(x[i] - 1);
  }
  while (qu.size()){
    int v = qu.front(); qu.pop();
    each(u, g[v]){
      if (d[u] == inf_ll){
        d[u] = d[v] + 1;
        qu.push(u);
      }
    }
  }

  rep(i, 1, n - 1){
    if (d[i] == 0) c[i] = inf_ll;
    else if (d[i] <= s) c[i] = q;
    else c[i] = p;
  }
  
  priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq;
  fill_n(d, 100000, inf_ll);
  d[0] = 0;
  pq.emplace(0, 0);
  while (pq.size()){
    ll sm; int v;
    tie(sm, v) = pq.top(); pq.pop();
    if (d[v] < sm) continue;
    each(u, g[v]){
      if (d[u] > sm + c[u]){
        d[u] = sm + c[u];
        pq.emplace(sm + c[u], u);
      }
    }
  }

  cout << d[n - 1] << endl;
}