#include<bits/stdc++.h>
#define ll long long
#define ii pair<int, int>
#define fi first
#define se second
#define task "PROJECT"
//#define task "task"

#define all(x) (x).begin(), (x).end()

using namespace std;

int n, h, s, d;
vector<int> a;
void ip() {
    cin >> n >> h >> s >> d;
    for(int i = 0; i < n; ++i) {
        int ai; cin >> ai; a.push_back(ai);
    }
    ll ans = 0;
    stack<ii> pq;
    int cur = 0;
    for(int i = 0; i < n; ++i) {
        if(cur < a[i]) {
            int numHire = a[i] - cur;

            while(true) {
                if(!pq.size()) break;
                if(numHire == 0) break;
                int num = pq.top().se, tim = pq.top().fi; pq.pop();
                ll t0 = 1LL * (i - tim) * s;
                ll t1 = h + d;
                int used = min(num, numHire); num -= used;
                if(t0 < t1) {
//                    cout << "waiting: " << t0 << " " << used << '\n';
                    ans += t0 * used;
                    ans -= 1LL * d * used;
                    numHire -= used;
                    if(num > 0)pq.push({tim, num});
                }
                else {
                    while(pq.size()) pq.pop();
                    break;
                }
            }
            if(numHire > 0) {
                ans += 1LL * numHire * h;
            }
        }
        else if(cur > a[i]) {
//            cout << "queue: " << i << " " << cur - a[i] << '\n';
            ans += 1LL * d * (cur - a[i]);
            pq.push({i, cur - a[i]});
        }
        ans += 1LL * a[i] * s;
        cur = a[i];
//        cout << i << " " << ans << '\n';
    }
    ans += 1LL * cur * d;
    cout << ans;
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    if(fopen(task".INP", "r")){
        freopen(task".INP", "r", stdin);
        freopen(task".OUT", "w", stdout);
    }
    int tt = 1;
//    cin >> tt;
    while(tt--) {
        ip();
    }
}
