#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

long long int tempDiff(const long long int left, const long long int right, const int s, const int t) {
	return (left > right) ? (left - right) * t : (left - right) * s;
}
class SegmentTree {
	std::vector<long long int> vec;
	const unsigned int size;
	void set(const int from, const int to, const long long int value) {
		if (from == to) vec[from] += value;
		else if (from < to) {
			if (from % 2 == 1) vec[from] += value;
			if (to % 2 == 0) vec[to] += value;
			set((from + 1) / 2, (to - 1) / 2, value);
		}
	}
	long long int get(const int index) const {
		return (index == 0) ? 0 : (vec[index] + get(index / 2));
	}
public:
	SegmentTree(const std::vector<long long int> &origin) : vec(origin.size() * 2, 0), size(origin.size()) {
		for (auto i = size; i < vec.size(); ++i) {
			vec[i] = origin[i - size];
		}
	}
	void add(const int from, const int to, const long long int value) {
		set(from + size, to + size, value);
	}
	long long int operator[](const int index) const {
		return get(index + size);
	}
};
int main() {
	int n, q, s, t;
	std::cin >> n >> q >> s >> t;
	std::vector<long long int> init(n + 1);
	for (auto &a : init) std::cin >> a;
	SegmentTree state(init);
	long long int current = 0;
	for (auto i = 1; i < init.size(); ++i)  current += tempDiff(init[i - 1], init[i], s, t);
	int l, r, x;
	for (auto i = 0; i < q; ++i) {
		std::cin >> l >> r >> x;
		if (r != n) {
			auto rl = state[r];
			auto rr = state[r + 1];
			current += tempDiff(rl + x, rr, s, t) - tempDiff(rl, rr, s, t);
		}
		auto ll = state[l - 1];
		auto lr = state[l];
		current += tempDiff(ll, lr + x, s, t) - tempDiff(ll, lr, s, t);
		state.add(l, r, x);
		std::cout << current << '\n';
	}
}
