#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>

#include <functional>
#include <cassert>

typedef long long ll;
using namespace std;

#define debug(x) cerr << #x << " = " << x << endl;


#define mod 1000000007 //1e9+7(prime number)
#define INF 1000000000 //1e9
#define LLINF 2000000000000000000LL //2e18
#define SIZE 200010


int main(){
  int n,q,s,t;
  ll a[SIZE];
  ll dif[SIZE];
  
  scanf("%d%d%d%d",&n,&q,&s,&t);

  for(int i=0;i<n+1;i++){
    scanf("%lld",a+i);
  }

  for(int j=1;j<n+1;j++){
    dif[j] = a[j] - a[j-1];
  }

  ll temp = 0;

  t *= -1;
  s *= -1;
  
  for(int i=1;i<n+1;i++){
    if(dif[i] < 0){
      temp += t * dif[i];
    }else{
      temp += s * dif[i];
    }
  }
  
  for(int i=0;i<q;i++){
    int r,l,x;

    scanf("%d%d%d",&l,&r,&x);
    r += 1;

    if(r <= n){
      if(dif[r] < 0){
        temp -= t * dif[r];
      }else{
        temp -= s * dif[r];
      }
    }
    
    if(dif[l] < 0){
      temp -= t * dif[l];
    }else{
      temp -= s * dif[l];
    }

    dif[r] -= x;
    dif[l] += x;

    if(r <= n){
      if(dif[r] < 0){
        temp += t * dif[r];
      }else{
        temp += s * dif[r];
      }
    }
    
    if(dif[l] < 0){
      temp += t * dif[l];
    }else{
      temp += s * dif[l];
    } 

    printf("%lld\n",temp);
  }
  
  
  return 0;
}