#include <bits/stdc++.h>
using namespace std;
int n, m, k, C, D, a[1010005], to[1010005], w1[1010005], w2[1010005],
    cnt = 1, tot, eg1[1010005], eg2[1010005], ts = 100;
vector<int> d[1010005], g[1010005];
void add(int s, int t, int s1, int s2) {
  ++cnt;
  to[cnt] = t;
  w1[cnt] = s1;
  w2[cnt] = s2;
  ++tot;
  g[tot].push_back(cnt);
  d[s].push_back(tot);
  ++cnt;
  to[cnt] = s;
  w1[cnt] = 0;
  w2[cnt] = -s2;
  ++tot;
  g[tot].push_back(cnt);
  d[t].push_back(tot);
}
void Add(int x, int y) {
  tot += 2;
  for (int i = 1; i <= k; ++i) {
    ++cnt;
    to[cnt] = y;
    w1[cnt] = 1;
    w2[cnt] = D * (2 * i - 1);
    g[tot - 1].push_back(cnt);
    ++cnt;
    to[cnt] = x;
    w1[cnt] = 0;
    w2[cnt] = D * (1 - 2 * i);
    g[tot].push_back(cnt);
  }
  d[x].push_back(tot - 1);
  d[y].push_back(tot);
}
int fa1[1010005], fa2[1010005], dis[1010005], sk[1010005], us[1010005];
int query(int x) {
  if (x & 1) {
    for (int i = 0; i < (int)g[x].size(); ++i) {
      int v = g[x][i];
      if (w1[v]) return v;
    }
    return 0;
  } else {
    for (int i = g[x].size() - 1; i >= 0; --i) {
      int v = g[x][i];
      if (w1[v]) return v;
    }
    return 0;
  }
}
bool spfa() {
  for (int i = 1; i <= ts * n + 2; ++i) dis[i] = 1e9;
  int l = 1, r = 0;
  dis[ts * n + 1] = 0;
  sk[++r] = ts * n + 1;
  us[ts * n + 1] = 1;
  while (l <= r) {
    int p = sk[l++];
    us[p] = 0;
    for (int i = 0; i < (int)d[p].size(); ++i) {
      int t = query(d[p][i]);
      if (t) {
        int v = to[t];
        if (dis[p] + w2[t] < dis[v]) {
          dis[v] = dis[p] + w2[t];
          fa1[v] = p;
          fa2[v] = t;
          if (!us[v]) sk[++r] = v, us[v] = 1;
        }
      }
    }
  }
  return dis[ts * n + 2] < 1e9;
}
void ac() {
  int ans = 0, cs = 0;
  while (spfa()) {
    int w = 1, tp = ts * n + 2;
    ans += dis[ts * n + 2] * w;
    tp = ts * n + 2;
    ++cs;
    while (tp != ts * n + 1) {
      int t = fa2[tp];
      w1[t] -= w;
      w1[t ^ 1] += w;
      tp = fa1[tp];
    }
  }
  printf("%d", ans);
}
int main() {
  scanf("%d%d%d%d%d", &n, &m, &k, &C, &D);
  for (int i = 1; i <= k; ++i) scanf("%d", &a[i]), add(ts * n + 1, a[i], 1, 0);
  for (int i = 1; i <= m; ++i) scanf("%d%d", &eg1[i], &eg2[i]);
  for (int i = 1; i <= ts; ++i)
    add((i - 1) * n + 1, ts * n + 2, 10000, (i - 1) * C);
  for (int i = 1; i < ts; ++i) {
    for (int j = 1; j <= m; ++j) {
      Add((i - 1) * n + eg1[j], i * n + eg2[j]);
      Add((i - 1) * n + eg2[j], i * n + eg1[j]);
    }
    for (int j = 1; j <= n; ++j) add((i - 1) * n + j, i * n + j, 10000, 0);
  }
  ac();
}
