#include <bits/stdc++.h>

using namespace std;

/*
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
*/

#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define rep(i,l,r) for (int i=l;i<=r;i++)
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define ll long long
#define ull unsigned long long
#define mod 998244353
#define nul(x) memset((x),0,sizeof((x)))

mt19937 mrand(random_device{}());
int rnd(int x) { return mrand() % x;}
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}

ll n,m,x,k,y;
ll a[200100],b[200100];
vector<ll>v;

bool check(){
    ll ind = 1;
    v.pb(0);
    for (int i=1;i<=n;i++){
        if (a[i]==b[ind]){
            ind++;
            v.pb(i);
        }
    }
    v.pb(n+1);
    if (ind==m+1)return true;
    else return false;
}

int main(){
    ios;
    memset(a,0,sizeof(a));

    cin>>n>>m;
    cin>>x>>k>>y;
    for (int i=1;i<=n;i++){
        cin>>a[i];
    }
    for (int i=1;i<=m;i++){
        cin>>b[i];
    }

    if (!check())return cout<<"-1\n",0;

    ll sum = 0;
    for (int i=1;i<v.size();i++){
        if (v[i]-v[i-1]==1)continue;

        ll mx=0;
        for (int j=v[i-1]+1;j<v[i];j++){
            mx = max(mx,a[j]);
        }

        ll ad = 2e18;
        if (max(a[v[i]],a[v[i-1]])>mx){
            ad = min(ad, (ll)y * (ll)(v[i]-v[i-1]-1));
        }
        if ((v[i]-v[i-1]-1) >= k){
            ad = min(ad, (ll)x * (ll)((v[i]-v[i-1]-1)/k) + (ll)y * (ll)((v[i]-v[i-1]-1)%k));
            
            ad = min(ad, x + (ll)y * (ll)((v[i]-v[i-1]-1) - k));
        }

        if (ad == 2e18)return cout<<"-1\n",0;

        sum += ad;
    }
    cout<<sum;
    return 0;
}
