#include <bits/stdc++.h>
using namespace std;
#define int long long int
const int INF = 4e18;
/*
fenwick tree
*/
struct Fenw {
int n; vector<int> BIT;
Fenw(int n = 0) : n(n), BIT(n, 0) {}
void update(int i, int delta) {for (; i < n; i |= i+1) BIT[i] += delta;}
int query(int i) {int r = 0; for (; i >= 0; i &= i+1, i--) r += BIT[i]; return r;}
};
signed main() {
cin.tie(0)->sync_with_stdio(0);
int n,q,s,t; cin >> n >> q >> s >> t;
auto f1 = Fenw(n+1), f2 = Fenw(n+1);
for (int i = 0; i <= n; i++) {int x; cin >> x; f1.update(i, x); f1.update(i+1, -x);}
auto cost = [&](int cur, int prev) {
int d = cur - prev;
if (d > 0) return -s * d;
return -t * d;
};
for (int i = 1; i <= n; i++) {
int u = f1.query(i), v = f1.query(i-1);
f2.update(i, cost(u,v));
}
while (q--) {
int l, r, x; cin >> l >> r >> x;
int left = f1.query(l-1);
int cl = f1.query(l);
f2.update(l, -cost(cl, left));
int cr, right;
if (r < n) {
cr = f1.query(r);
right = f1.query(r+1);
f2.update(r+1, -cost(right, cr));
}
f1.update(l, x);
f1.update(r+1, -x);
int nl = f1.query(l);
f2.update(l, cost(nl, left));
if (r < n) {
int nr = f1.query(r);
f2.update(r+1, cost(right, nr));
}
cout << f2.query(n) << "\n";
}
return 0;
}