#include <iostream>
#include <cstdio> 
#include <algorithm>
#include <cstring>
#include <queue>
#include <cmath>
#include <map>
using namespace std;
#define reg register
#define gc getchar
inline int read() {
    int res=0;char ch=gc();bool fu=0;
    while(!isdigit(ch))fu|=(ch==‘-‘), ch=gc();
    while(isdigit(ch))res=(res<<3)+(res<<1)+(ch^48), ch=gc();
    return fu?-res:res;
}
#define N 500005
int n, k, L, R;
int a[N], sum[N];
#define pii pair<int, int>
#define mkp make_pair
priority_queue<pii> q;
int tim[N];
int cpy[N], u;
namespace seg {
    int tr[N*25], ls[N*25], rs[N*25], tot, root[N];
    int Insert(int o, int l, int r, int p)
    {
        int jd = ++tot;
        tr[jd] = tr[o] + 1;
        if (l == r) return jd;
        ls[jd] = ls[o], rs[jd] = rs[o];
        int mid = (l + r) >> 1;
        if (p <= mid) ls[jd] = Insert(ls[o], l, mid, p);
        else rs[jd] = Insert(rs[o], mid + 1, r, p);
        return jd;
    }
    int K_th(int l, int r, int o1, int o2, int k)
    {
        if (l == r) return l;
        int sum = tr[ls[o2]] - tr[ls[o1]];
        int mid = (l + r) >> 1;
        if (sum >= k) return K_th(l, mid, ls[o1], ls[o2], k);
        else return K_th(mid + 1, r, rs[o1], rs[o2], k - sum);
    }
}
int now = 1;
long long ans;
int lmx[N], rmx[N];
int main()
{
    n = read(), k = read(), L = read(), R = read();
    for (reg int i = 1 ; i <= n ; i ++) a[i] = read();
    for (reg int i = 1 ; i <= n ; i ++) cpy[i] = sum[i] = sum[i - 1] + a[i];
    sort(cpy + 1, cpy + 1 + n);
    u = unique(cpy + 1, cpy + 1 + n) - cpy - 1;
    for (reg int i = 1 ; i <= n ; i ++) sum[i] = lower_bound(cpy + 1, cpy + 1 + u, sum[i]) - cpy;
    for (reg int i = 1 ; i <= n ; i ++) seg::root[i] = seg::Insert(seg::root[i - 1], 1, u, sum[i]);
    for (reg int i = 1 ; i <= n - L + 1 ; i ++)
    {
        int l = min(n, i + L - 1), r = min(n, i + R - 1);
        lmx[i] = l, rmx[i] = r;
        tim[i] = 1;
//        printf("%d %d %d\n", i, l, r);
        q.push(mkp(cpy[seg::K_th(1, u, seg::root[l - 1], seg::root[r], rmx[i] - lmx[i] + 2 - tim[i])] - cpy[sum[i - 1]], i));
    }
//    for (int i = 1;  i <= n ; i ++) printf("%d ", sum[i]);puts("");
    for ( ; now <= k ; now ++)
    {
        pii tp = q.top();q.pop();
        ans += tp.first;
        tim[tp.second] ++;
//        printf("%d %d\n", tp.second, tp.first);
        if (tim[tp.second] > rmx[tp.second] - lmx[tp.second] + 1) continue;
        int l = min(n, tp.second + L - 1), r = min(n, tp.second + R - 1);
        q.push(mkp(cpy[seg::K_th(1, u, seg::root[l - 1], seg::root[r], rmx[tp.second] - lmx[tp.second] + 2 - tim[tp.second])] - cpy[sum[tp.second - 1]], tp.second));
    }
    cout << ans << endl;
    return 0;
}