#include <bits/stdc++.h>
using namespace std;
long long n, m, x, y, k, res = 0, a[200002], b[200002];
long long upd(long long st, long long ed) {
  long long ln = ed - st + 1, l = st, r = ed;
  long long fl = 0, mx = 0;
  for (long long i = st; i <= ed; i++) mx = max(mx, a[i]);
  if (l - 1 >= 0 && mx < a[l - 1]) fl = 1;
  if (r + 1 < n && mx < a[r + 1]) fl = 1;
  if (ln < k && !fl) return 0;
  long long nd = ln % k;
  res += (nd * y);
  ln -= nd;
  if (y * k >= x)
    res += (ln / k) * x;
  else if (fl)
    res += (ln * y);
  else
    res += (ln - k) * y + x;
  return 1;
}
int32_t main() {
  cin >> n >> m >> x >> k >> y;
  for (long long i = 0; i < n; i++) cin >> a[i];
  for (long long i = 0; i < m; i++) cin >> b[i];
  long long a1 = 0, b1 = 0, lst = 0;
  while (b1 < m) {
    while (a1 < n && b[b1] != a[a1]) a1++;
    if (a1 == n) {
      cout << "-1" << endl;
      return 0;
    }
    if (lst <= a1 - 1) {
      if (!upd(lst, a1 - 1)) {
        cout << "-1" << endl;
        return 0;
      }
    }
    lst = a1 + 1;
    b1++;
  }
  if (lst <= n - 1) {
    if (!upd(lst, n - 1)) {
      cout << "-1" << endl;
      return 0;
      ;
    }
  }
  cout << res << endl;
}

### Prompt

Construct a cpp code solution to the problem outlined:

There are n warriors in a row. The power of the i-th warrior is a_i. All powers are pairwise distinct.

You have two types of spells which you may cast: 

  1. Fireball: you spend x mana and destroy exactly k consecutive warriors; 
  2. Berserk: you spend y mana, choose two consecutive warriors, and the warrior with greater power destroys the warrior with smaller power. 



For example, let the powers of warriors be [2, 3, 7, 8, 11, 5, 4], and k = 3. If you cast Berserk on warriors with powers 8 and 11, the resulting sequence of powers becomes [2, 3, 7, 11, 5, 4]. Then, for example, if you cast Fireball on consecutive warriors with powers [7, 11, 5], the resulting sequence of powers becomes [2, 3, 4].

You want to turn the current sequence of warriors powers a_1, a_2, ..., a_n into b_1, b_2, ..., b_m. Calculate the minimum amount of mana you need to spend on it.

Input

The first line contains two integers n and m (1 ≤ n, m ≤ 2 ⋅ 10^5) — the length of sequence a and the length of sequence b respectively.

The second line contains three integers x, k, y (1 ≤ x, y, ≤ 10^9; 1 ≤ k ≤ n) — the cost of fireball, the range of fireball and the cost of berserk respectively.

The third line contains n integers a_1, a_2, ..., a_n (1 ≤ a_i ≤ n). It is guaranteed that all integers a_i are pairwise distinct.

The fourth line contains m integers b_1, b_2, ..., b_m (1 ≤ b_i ≤ n). It is guaranteed that all integers b_i are pairwise distinct.

Output

Print the minimum amount of mana for turning the sequnce a_1, a_2, ..., a_n into b_1, b_2, ..., b_m, or -1 if it is impossible.

Examples

Input


5 2
5 2 3
3 1 4 5 2
3 5


Output


8


Input


4 4
5 1 4
4 3 1 2
2 4 3 1


Output


-1


Input


4 4
2 1 11
1 3 2 4
1 3 2 4


Output


0

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
long long n, m, x, y, k, res = 0, a[200002], b[200002];
long long upd(long long st, long long ed) {
  long long ln = ed - st + 1, l = st, r = ed;
  long long fl = 0, mx = 0;
  for (long long i = st; i <= ed; i++) mx = max(mx, a[i]);
  if (l - 1 >= 0 && mx < a[l - 1]) fl = 1;
  if (r + 1 < n && mx < a[r + 1]) fl = 1;
  if (ln < k && !fl) return 0;
  long long nd = ln % k;
  res += (nd * y);
  ln -= nd;
  if (y * k >= x)
    res += (ln / k) * x;
  else if (fl)
    res += (ln * y);
  else
    res += (ln - k) * y + x;
  return 1;
}
int32_t main() {
  cin >> n >> m >> x >> k >> y;
  for (long long i = 0; i < n; i++) cin >> a[i];
  for (long long i = 0; i < m; i++) cin >> b[i];
  long long a1 = 0, b1 = 0, lst = 0;
  while (b1 < m) {
    while (a1 < n && b[b1] != a[a1]) a1++;
    if (a1 == n) {
      cout << "-1" << endl;
      return 0;
    }
    if (lst <= a1 - 1) {
      if (!upd(lst, a1 - 1)) {
        cout << "-1" << endl;
        return 0;
      }
    }
    lst = a1 + 1;
    b1++;
  }
  if (lst <= n - 1) {
    if (!upd(lst, n - 1)) {
      cout << "-1" << endl;
      return 0;
      ;
    }
  }
  cout << res << endl;
}

```