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

template<typename T>
vector<T> make_v(size_t a){return vector<T>(a);}
template<typename T>
vector<vector<T> > make_v(size_t a,size_t b){
  return vector<vector<T> >(a,make_v<T>(b));
}
template<typename T>
vector<vector<vector<T> > > make_v(size_t a,size_t b,size_t c){
  return vector<vector<vector<T> > > (a,make_v<T>(b,c));
}

template<typename T,typename V>
typename enable_if<is_class<T>::value==0>::type
fill_v(T &t,const V &v){t=v;}

template<typename T,typename V>
typename enable_if<is_class<T>::value!=0>::type
fill_v(T &t,const V &v){
  for(auto &e:t) fill_v(e,v);
}

//INSERT ABOVE HERE
signed main(){
  Int n,m,k,s,p,q;
  cin>>n>>m>>k>>s>>p>>q;

  vector<Int> z(n,-1);
  for(Int i=0;i<k;i++){
    Int x;
    cin>>x;
    z[x-1]=0;
  }
  
  auto G=make_v<Int>(n,0);
  for(Int i=0;i<m;i++){
    Int a,b;
    cin>>a>>b;
    a--;b--;
    G[a].emplace_back(b);
    G[b].emplace_back(a);
  }

  {
    queue<Int> qu;
    for(Int i=0;i<n;i++)
      if(~z[i]) qu.emplace(i);

    while(!qu.empty()){
      Int v=qu.front();qu.pop();
      for(Int u:G[v]){
	if(~z[u]) continue;
	z[u]=z[v]+1;
	qu.emplace(u);
      }
    }
  }
  using P = pair<Int, Int>;
  priority_queue<P,vector<P>,greater<P> > pq;
  const Int INF = 1e15;
  vector<Int> dp(n,INF);
  dp[0]=0;
  pq.emplace(dp[0],0);

  while(!pq.empty()){
    Int d,v;
    tie(d,v)=pq.top();pq.pop();
    if(dp[v]<d) continue;
    for(Int u:G[v]){
      if(!z[u]) continue;
      Int c=dp[v]+(u!=n-1)*(z[u]<=s?q:p);
      if(dp[u]<=c) continue;
      dp[u]=c;
      pq.emplace(dp[u],u);
    }
  }

  cout<<dp[n-1]<<endl;
  return 0;
}

