#include <bits/stdc++.h>
using namespace std;
constexpr int maxn=2e5 + 5;
class segtree{
private:
vector<long long> tree;
int len=1;
void radd(int v,int cs,int ce,int ls,int le,int x){
if (cs>=ls && ce<=le){
tree[v]+=x;
return;
}
if (cs>le || ce<ls) return;
int mid=(cs+ce)/2;
radd(2*v,cs,mid,ls,le,x);
radd(2*v+1,mid+1,ce,ls,le,x);
}
long long pget(int pos){
pos+=len;
long long ans=tree[pos];
while (pos>1){
pos/=2;
ans+=tree[pos];
}
return ans;
}
public:
segtree(int n, vector<long long> &arr){
while (len<n) len<<=1;
tree.resize(2*len);
for (int i=0;i<n;i++){
tree[i+len]=arr[i];
}
}
void add(int l,int r,int x){radd(1,0,len-1,l,r,x);}
long long get(int pos){return pget(pos);}
};
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n,q,s,t;
cin>>n>>q>>s>>t;
n++;
vector<long long> l(n);
for (int i=0;i<n;i++) cin>>l[i];
segtree tree(n,l);
long long ans=0;
for (int i=1;i<n;i++){
long long diff=l[i-1]-l[i];
if (diff>0){
ans+=diff*t;
} else {
ans+=diff*s;
}
}
while (q--){
int l,r,x;
cin>>l>>r>>x;
long long diff1=tree.get(l-1)-tree.get(l);
if (diff1>0) ans-=diff1*t;
else ans-=diff1*s;
if (r<n-1){
long long diff2=tree.get(r)-tree.get(r+1);
if (diff2>0) ans-=diff2*t;
else ans-=diff2*s;
}
tree.add(l,r,x);
long long diff3=tree.get(l-1)-tree.get(l);
if (diff3>0) ans+=diff3*t;
else ans+=diff3*s;
if (r<n-1){
long long diff4=tree.get(r)-tree.get(r+1);
if (diff4>0) ans+=diff4*t;
else ans+=diff4*s;
}
cout<<ans<<"\n";
}
return 0;
}