#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5;
const ll LLINF = 1e18;

int n, t, a, b, k[maxn+5];
ll dp[1001][1001], f[maxn+5];

void read() {
    cin >> n >> t >> a >> b;
    for (int i = 1; i<=n; ++i) cin >> k[i];
}

void sub1() {
    int cur_time = 0;
    ll res = 0;
    for (int i = 1; i<=n; ++i) {
        if (cur_time + a <= t) {
            cur_time += a;
            res += 1LL * k[i];
        } else break;
    }
    cout << res;
}

void sub2() {
    for (int i = 0; i<=n; ++i) {
        for (int j = 0; j<=t; ++j) dp[i][j] = -LLINF;
    }
    dp[0][0] = 0;

    for (int i = 1; i<=n; ++i) {
        for (int time = 0; time <= t; ++time) {
            if (time >= a && dp[i-1][time-a] != -LLINF)
                dp[i][time] = max(dp[i][time], 1LL * dp[i-1][time-a] + k[i]);
            if (time >= b && dp[i-1][time-b] != -LLINF)
                dp[i][time] = max(dp[i][time], dp[i-1][time-b]);
        }
    }

    ll res = 0;
    for (int i = 1; i<=n; ++i) {
        for (int j = 0; j<=t; ++j) res = max(res, dp[i][j]);
    }
    cout << res;
}
void sub3() {
    for (int i = 1; i<=n; ++i) {
        f[i] = 1LL * f[i-1] + k[i];
    }

    ll res = 0;
    for (int g = 1; g<=n; ++g) {
        int lo = g, hi = n;
        while (lo <= hi) {
            int mid = (lo + hi) / 2;
            ll reward = f[mid] - f[g-1];
            int time = (g-1)*b + (mid-g+1)*a;
            if (time <= t) {
                res = max(res, reward);
                lo = mid+1;
            } else hi = mid-1;
        }
    }
    cout << res;
}
void solve() {
    bool check_sub1 = true;
    for (int i = 1; i<n; ++i) {
        if (k[i] < k[i+1]) {
            check_sub1 = false;
            break;
        }
    }
    if (check_sub1) {
        sub1();
        return;
    }
    if (n <= 1000 && t <= 1000) {
        sub2();
        return;
    }
    sub3();
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    freopen("game.inp", "r", stdin);
    freopen("game.out", "w", stdout);
    read();
    solve();
    return 0;
}
