#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
long long a[maxn], b[maxn];
map<long long, long long> mp;
int main() {
  long long n, m;
  cin >> n >> m;
  long long x, k, y;
  cin >> x >> k >> y;
  for (int i = 1; i <= n; i++) {
    scanf("%lld", &a[i]);
    mp[a[i]] = i;
  }
  a[n + 1] = -1;
  mp[-1] = n + 1;
  int flag = 0;
  for (int i = 1; i <= m; i++) scanf("%lld", &b[i]);
  b[m + 1] = -1;
  long long ans = 0;
  int flag2 = 0;
  for (int i = 1; i <= m + 1; i++) {
    if (mp[b[i]] <= mp[b[i - 1]]) flag2 = 1;
    int dis = mp[b[i]] - mp[b[i - 1]] - 1;
    long long maxi = -1;
    for (int j = mp[b[i - 1]] + 1; j < mp[b[i]]; j++) {
      maxi = max(maxi, a[j]);
    }
    if (maxi > b[i] && maxi > b[i - 1]) {
      if (dis < k) flag2 = 1;
      dis -= k;
      ans += x;
    }
    ans += min(dis / k * x + dis % k * y, dis * y);
  }
  if (flag2 == 1)
    cout << -1 << endl;
  else
    cout << ans << endl;
}
