#include<bits/stdc++.h>
using namespace std;
#define MAXN 80100
#define int long long
int tree[MAXN * 4];
int sum[MAXN];
int a[MAXN];
int n;
int kmin, kmax, t, mod;
inline void build(int x, int l, int r) {
if (l == r)tree[x] = l % mod;
else {
int mid = (l + r) >> 1;
build(2 * x, l, mid);
build(2 * x + 1, mid + 1, r);
tree[x] = tree[2 * x] + tree[2 * x + 1] % mod;
}
}
inline void add(int val, int l, int r, int x, int gl, int gr) {
if (gl == gr)if (l == gl)if (l == r)tree[x] = tree[x] + val % mod;
int mid = (gl + gr) / 2;
if (r == mid) add(val, l, mid, 2 * x, gl, mid);
else if (r > mid) {
add(val, l, mid, 2 * x, gl, mid);
add(val, mid + 1, r, 2 * x + 1, mid + 1, gr);
} else if (l == mid)add(val, mid, r, 2 * x + 1, mid, gr);
else if (l > mid) add(val, mid + 1, r, 2 * x + 1, mid + 1, gr);
else if (l < mid)add(val, l, mid, 2 * x, gl, mid);
}
int cnt = 0;
inline void init(int l, int r) {
if (l == r) a[++cnt] = l * cnt % mod;
else {
int mid = (l + r) >> 1;
init(l, mid);
init(mid + 1, r);
}
}
pair<int, int> pv[1010];
int tmp_pv = 0;
signed main() {
cin >> n >> t >> mod >> kmin >> kmax;
for (int i = 1; i <= n; ++i)cin >> a[i];
build(1, 1, n);
while (t--) {
char c;
int l, r;
scanf("%c %d %d", &c, &l, &r);
if (c == 'A') {
int x;
cin >> x;
add(x, l, r, 1, 1, n);
} else pv[++tmp_pv] = make_pair(l, r);
}
init(1, n);
for (int i = 1; i <= n ; ++i) sum[i] = sum[i - 1] + a[i];
for (int i = 1; i <= tmp_pv; ++i) cout << sum[pv[i].second + 1] - sum[pv[i].first] << endl;
int q;
cin >> q;
while (q--) {
int l, r;
cin >> l >> r;
cout << sum[r + 1] - sum[l] << endl;
}
return 0;
}