#pragma GCC optimize("Ofast")
#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <set>
#include <map>
#include <deque>
#include <stack>
#include <queue>
#include <algorithm>
#include <cassert>
#include <random>
#include <chrono>
#include <iomanip>
#include <cmath>
#include <bitset>
#include <functional>
#include <ranges>
#include <numeric>
#define int long long
#define double long double
#define ii pair<int,int>
#define iii pair<int, ii >
#define fi first
#define se second
#define getbit(x,y) (((x)>>(y))&1ll)
#define turnon(x,y) ((x)|(1ll<<y))
#define turnof(x,y) ((x)^(1ll<<y))
#define oo 1e18
#define pb push_back
#define all(x) x.begin(),x.end()
#define con(mask) mask=(mask-1)&mask
#define Unique(val) val.erase(unique(val.begin(),val.end()),val.end())

#define rand_int mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define rand_ll mt19937_64 rnd(chrono::steady_clock::now().time_since_epoch().count());

const int mod = 1e9 + 7;
const double pi = acos(-1);
const double esp = 1e-7;

using namespace std;

int D;
int T_c;
int C_1, C_2;
int N_1, N_2;

int h[100005];

deque<ii> Old, Middle, New;

void add(int day, int val) {
    ...
}

void update(int pos_1, int pos_2) {
    ...
}

int check(int mid) {
    // assume N_1 > N_2 and C_1 < C_2
    // If not we just need to use one of them

    if(C_1 > C_2) {
        swap(N_1, N_2);
        swap(C_1, C_2);
    }
    if(N_1 < N_2) {
        N_2 = N_1;
        C_2 = C_1;
    }

    Old.clear();
    Middle.clear();
    New.clear();

    int sum = mid * T_c - mid * C_1;

    add(-1000000, mid);

    for(int i = 1; i <= D; i++) {
        update(i - N_1, i - N_2);
        int tmp = 0;
        while(Old.size() && tmp < h[i]) {
            ...
        }

        while(Middle.size() && tmp < h[i]) {
            ...
        }

        if(tmp < h[i]) return -1;
        add(i, h[i]);
    }
    return sum;

}

void solve() {

    cin >> D >> N_1 >> N_2 >> C_1 >> C_2 >> T_c;

    for(int i = 1; i <= D; i++) cin >> h[i];

    int l = 0, r = 1e12;
    while(r - l > 2) {
        int mid_1 = l + ( r - l ) / 3;
		int mid_2 = l + ( r - l ) / 3 * 2;
        int tmp = check(mid_1);
        if(tmp < 0 || tmp >= check(mid_2)) {
            l = mid_1;
        }
        else r = mid_2;
    }

    int ans = check(r);

    for(int i = l; i < r; i++) {
        int tmp = check(i);
        if(tmp < 0) continue;
        ans = min(ans, tmp);
    }
    cout << ans;
    
}

signed main() {


    #ifndef ONLINE_JUDGE
    freopen("inp.inp", "r", stdin);
    freopen("out.out", "w", stdout);
    #endif


    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

    int t = 1;
    //cin >> t;

    while(t--) {
        solve();
    }
}
//      ProTeam
//(¯`·.·´¯) (¯`·.·´¯)
//`·.¸(¯`·.·´¯)¸ .·
//×°× ` ·.¸.·´ ×°×
