#include <iostream>
#include <cstring>
#include <cmath>
#include <ctime>
using namespace std;
#define ms(x,y) memset(x,y,sizeof(x))
#define mc(x,y) memcpy(x,y,sizeof(x))
#define int long long
int n,q,s,t;
int a[2000005],c[2000005]={0};
signed main()
{
clock_t t1=clock();
#ifdef LOCAL
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
#endif
//==================================
cin>>n>>q>>s>>t;
int B=0;
for(int i=0;i<=n;i++)
{
cin>>a[i];
if(i==0) continue;
if(a[i-1]<a[i]) B-=s*(a[i]-a[i-1]);
else B+=t*(a[i-1]-a[i]);
}
// cout<<B<<"\n";
while(q--)
{
int x,y,z;
cin>>x>>y>>z;
if(a[x-1]+c[x-1]<a[x]+c[x]) B+=s*(a[x]+c[x]-a[x-1]-c[x-1]);
else B+=t*(a[x]+c[x]-a[x-1]-c[x-1]);
c[x]+=z;
if(a[x-1]+c[x-1]<a[x]+c[x]) B-=s*(a[x]+c[x]-a[x-1]-c[x-1]);
else B-=t*(a[x]+c[x]-a[x-1]-c[x-1]);
if(y<n)
{
if(a[y]+c[y]<a[y+1]+c[y+1]) B-=s*(a[y]+c[y]-a[y+1]-c[y+1]);
else B-=t*(a[y]+c[y]-a[y+1]-c[y+1]);
c[y+1]-=z;
if(a[y]+c[y]<a[y+1]+c[y+1]) B+=s*(a[y]+c[y]-a[y+1]-c[y+1]);
else B+=t*(a[y]+c[y]-a[y+1]-c[y+1]);
}
cout<<B<<"\n";
}
//==================================
cerr<<"Time used:"<<clock()-t1<<"ms"<<"\n";
return 0;
}
/*
题解里大部分都是直接求出差分数组然后操作
这里我把差分数组单独分开来算了
*/