#include <bits/stdc++.h>
#define int long long
int n,q,s,t;
int fwk[200010];
void updatefwk(int i,int c){
while(i>0)fwk[i]+=c,i-=(i&-i);
}
int getValue(int i){
if(i==0)return 0;
int sum=0;
while(i<=n+5)sum+=fwk[i],i+=(i&-i);
return sum;
}
void update(int l,int r,int change){
updatefwk(l-1,-change);
updatefwk(r,change);
}
signed main(){
std::cin >> n >> q >> s >> t;
int last=0;
int lastTemp=0;
for(int i=0;i<=n;i++){
int in;
std::cin >> in;
update(i+1,i+1,in);
if(i!=0){
if(in>last)lastTemp-=s*(in-last);
else lastTemp+=t*(last-in);
}
last = in;
}
while(q--){
int l,r,c;
std::cin >> l >> r >> c;
l+=1;
r+=1;
int leftV=getValue(l);
int rightV=getValue(r);
int edgeLV=getValue(l-1);
int engeRV=getValue(r+1);
if(l!=1)
if(leftV>edgeLV)lastTemp+=s*(leftV-edgeLV);
else lastTemp-=t*(edgeLV-leftV);
if(r!=n+1)
if(engeRV>rightV)lastTemp+=s*(engeRV-rightV);
else lastTemp-=t*(rightV-engeRV);
update(l,r,c);
leftV=getValue(l);
rightV=getValue(r);
if(l!=1)
if(leftV>edgeLV)lastTemp-=s*(leftV-edgeLV);
else lastTemp+=t*(edgeLV-leftV);
if(r!=n+1)
if(engeRV>rightV)lastTemp-=s*(engeRV-rightV);
else lastTemp+=t*(rightV-engeRV);
std::cout << lastTemp << '\n';
//for(int i=1;i<=n+1;i++)std::cout << getValue(i) << ' ';
//std::cout << '\n';
}
}