#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define INF 1<<30
#define LINF 1LL<<60

/*
 <url:https://www.ioi-jp.org/joi/2016/2017-ho/2017-ho.pdf>
 ?????????============================================================
 IOI ?????§??????????????????????????£??????????¢¨?????????????????????
 ?¢¨?????°??? 0 ????????°??? 1 ?????°??? 2,??? ??¨????????????????????????????????°??? N ?????§?????????
 ??°??? N ?????? JOI ????????¶???????????????????????????
 ??°??? 0 ????¨??????? A0=0 ??§???????????°??? i(1???i???N) ????¨??????? Ai ??§?????????
 
 ?¢¨?????°??¨??¢????????£????????????????????????????????????????¢¨???????????????????????????
 ????????\??????????????°??? 0 ??§????¢¨???????????? 0 ?????§????????????????????? i(0???i???N???1)???????????????
 ??°??? i ????????°??? i+1 ????????????????¢¨????????????????????????????????????????????? Ai ??¨ Ai+1 ??????????????????????????????
 ??\????????????????????£????????????
 
 Ai<Ai+1 ?????¨???????¨??????? 1 ??????????????¨????¢¨???????????? S ???????????????
 Ai??§Ai+1 ?????¨???????¨??????? 1 ??????????????¨????¢¨???????????? T ???????????????
 IOI ??????????????§?????°????????????????????§?????????
 ???????????????Q ??\????????°??????????????????????????\????????????
 j ??\???(1???j???Q) ?????????Lj???k???Rj(1???Lj???Rj???N) ??????????????°???????¨???? Ak ??? Xj ?????????????????????
 Xj ??????????????¨??????????¨??????? Xj????????????????????¨???????????????Xj ???????????¨??????????¨??????? |Xj| ????????????????????¨??????????????????
 
 ?????????????????????????????°????????????????????£????????????JOI ????????¶??????????¢¨?????????????±????????????¨??§?????????
 =================================================================
 ?§£??¬=============================================================
 0 -4 2 -5
 -2   +2
 0 -6 0 -5
 +2 -4
 
 ================================================================
 */

struct SegTree {
    int N;
    ll init_v = 0;
    vector<ll> node, lazy;
    
    SegTree(int _N) {
        N = 1;
        while (N < _N) N *= 2;
        node.resize(2 * N - 1, init_v);
        lazy.resize(2 * N - 1, init_v);
    }
    
    void lazy_evaluate(int k) {
        node[k] += lazy[k]; // add ???????????????
        if (k < N - 1) {
            lazy[2 * k + 1] += lazy[k] / 2; // add ???????????????
            lazy[2 * k + 2] += lazy[k] / 2;
        }
        lazy[k] = 0;
    }
    
    /* [a,b) ?????°??????????????¨???!! s~t?????§?????´??°???update(s,t+1,~) */
    ll update(int a, int b, ll x) { return update(a, b, 0, 0, N, x); }
    ll update(int a, int b, int k, int l, int r, ll x) {
        if (r <= a || b <= l) {
            lazy_evaluate(k); // node????????§???????????????????????´??°
            return node[k];
        }
        if (a <= l && r <= b) {
            lazy[k] += (r - l) * x; // ?????§?????????????????????????????¨???????????§????????°, ?????§?????????*????????????node??????????????????
            lazy_evaluate(k);
            return node[k];
        }
        else {
            lazy_evaluate(k);
            ll vl = update(a, b, 2 * k + 1, l, (l + r) / 2, x);
            ll vr = update(a, b, 2 * k + 2, (l + r) / 2, r, x);
            return node[k] = vl + vr;
        }
    }
    
    /* [a,b) ?????°??????????????¨???!! */
    ll query(int a, int b) { return query(a, b, 0, 0, N); }
    ll query(int a, int b, int k, int l, int r) {
        if (r <= a || b <= l) return init_v;
        if (a <= l && r <= b) {
            lazy_evaluate(k);
            return node[k];
        }
        else {
            lazy_evaluate(k);
            ll vl = query(a, b, 2 * k + 1, l, (l + r) / 2);
            ll vr = query(a, b, 2 * k + 2, (l + r) / 2, r);
            return vl + vr;
        }
    }
};

int main(void) {
    cin.tie(0); ios::sync_with_stdio(false);
    ll N,Q,S,T; cin >> N >>Q >> S >> T;
    vector<ll> A(N+1);
    for(auto& a: A) cin >> a;
    SegTree rsq((int)N);
    for(int i = 0; i < N;i++){
        if(A[i] < A[i+1]){
            rsq.update(i,i+1,(A[i] - A[i+1])*S);
        }else{
            rsq.update(i,i+1,(A[i] - A[i+1])*T);
        }
    }
    for(int i = 0; i < Q;i++){
        ll l,r,x; cin >> l >> r >> x;
        ll L = rsq.query(l-1,l), R = rsq.query(r,r+1);
        
        ll newL = L/(L < 0? S:T) - x;
        ll newR = R/(R < 0? S:T) + x;
        rsq.update(l-1,l, -L + newL * (newL < 0 ? S:T));
        rsq.update(r,r+1, -R + newR * (newR < 0 ? S:T));
        cout << rsq.query(0,N) << endl;
    }
    return 0;
}

Measured memory_bytes: 12620