#include <bits/stdc++.h>
#define fst first
#define snd second
#define pb push_back
#define SZ(x) (int)x.size()
#define ALL(x) x.begin(),x.end()
#define mset(a,v) memset(a,v,sizeof(a))
#define forn(i,a,b) for(int i = a; i<b; i++)
using namespace std;
typedef long long ll;
struct Fenwick{
ll n;
vector<ll> st;
Fenwick(ll n):n(n),st(2*n+5,0){}
void upd(ll p, ll v){
while(p<=n){
st[p]+=v;
p+=(p&-p);
}
}
ll query(ll p){
ll res = 0;
while(p>=1){
res+=st[p];
p-=(p&-p);
}
return res;
}
};
int main(){
ll n,q,s,t; cin>>n>>q>>s>>t;
vector<ll> a(n+1); forn(i,0,n+1) cin>>a[i];
ll res = 0;
vector<ll> dif=a;
forn(i,1,n+1){
dif[i]=a[i]-a[i-1];
if(dif[i]<=0) res+=abs(dif[i])*t;
else res-=abs(dif[i])*s;
}
Fenwick fen(n+2);
forn(i,1,n+1) fen.upd(i,dif[i]);
forn(i,0,q){
ll l,r,k; cin>>l>>r>>k;
ll ldif = fen.query(l)-(l-1>=1?fen.query(l-1):0);
if(ldif<=0) res-=abs(ldif)*t;
else res+=abs(ldif)*s;
fen.upd(l,k);
ldif = fen.query(l)-(l-1>=1?fen.query(l-1):0);
if(ldif<=0) res+=abs(ldif)*t;
else res-=abs(ldif)*s;
if(r+1<=n){
ll rdif = fen.query(r+1)-fen.query(r);
if(rdif<=0) res-=abs(rdif)*t;
else res+=abs(rdif)*s;
fen.upd(r+1,-k);
rdif = fen.query(r+1)-fen.query(r);
if(rdif<=0) res+=abs(rdif)*t;
else res-=abs(rdif)*s;
}
cout<<res<<'\n';
}
return 0;
}