#include<bits/stdc++.h>
#define MAX 100100
#define inf 1e15
#define f first
#define s second
#define mp make_pair
using namespace std;

typedef long long ll;

int n,m,k,s,p,q;
int infect[MAX]={};
vector<int> e[MAX];
vector<int> K;

ll dijkstra(){
  ll d[MAX]={};
  for(int i=0;i<MAX;i++)d[i]=inf;
  priority_queue<pair<ll,int> > pq;
  d[0]=0;
  pq.push(mp(0,0));

  while(!pq.empty()){
    pair<ll,int> u = pq.top();
    pq.pop();
    ll cost = u.f*(-1);
    int now = u.s;

    if(now == n-1)return cost-p;
    if(d[now]<cost)continue;

    for(int i=0;i<e[now].size();i++){
      int next = e[now][i];
      if(infect[next]==2)continue;
      if(infect[next]==0 && cost+p<d[next]){
        d[next] = cost+p;
        pq.push(mp((-1)*(cost+p),next));
      }
      if(infect[next]==1 && cost+q<d[next]){
        d[next] = cost+q;
        pq.push(mp((-1)*(cost+q),next));
      }
    }
  }
}

int main()
{
  int a,b,x;

  cin>>n>>m>>k>>s;
  cin>>p>>q;
  for(int i=0;i<k;i++){
    cin>>x;
    x--;
    K.push_back(x);
  }

  for(int i=0;i<m;i++){
    cin>>a>>b;
    a--;b--;
    e[a].push_back(b);
    e[b].push_back(a);
  }

  queue<pair<int,int> > q;
  for(int i=0;i<K.size();i++){
    infect[K[i]]=2;
    q.push(mp(K[i],s));
  }

  while(!q.empty()){
    pair<int,int> u=q.front();
    q.pop();
    int now=u.f;
    int c=u.s;
    if(c==0)continue;
    for(int i=0;i<e[now].size();i++){
      int next = e[now][i];
      if(infect[next]==0 && next!=0 && next!=n-1){
        infect[next]=1;
        q.push(mp(next,c-1));
      }
    }
  }

  ll ans = dijkstra();
  cout<<ans<<endl;

  return 0;
}