#include <bits/stdc++.h>
using namespace std;
struct node {
  long pre, suf;
};
long n, A, B;
node IT[long(2e5 + 100) * 5];
node make_empty() {
  node tmp;
  tmp.pre = 0, tmp.suf = 0;
  return tmp;
}
node Union(node k1, node k2) {
  node tmp;
  tmp.pre = k1.pre + k2.pre;
  tmp.suf = k1.suf + k2.suf;
  return tmp;
}
void update(long k, long L, long R, long l, long r, long val) {
  if (l > R || r < L) return;
  if (l <= L && R <= r) {
    IT[k].pre = min(IT[k].pre + val, B);
    IT[k].suf = min(IT[k].suf + val, A);
    return;
  }
  long mid = (L + R) >> 1;
  update(k << 1, L, mid, l, r, val);
  update(k << 1 | 1, mid + 1, R, l, r, val);
  IT[k] = Union(IT[k << 1], IT[k << 1 | 1]);
}
node get(long k, long L, long R, long l, long r) {
  if (l > R || r < L) return make_empty();
  if (l <= L && R <= r) return IT[k];
  long mid = (L + R) >> 1;
  return Union(get(k << 1, L, mid, l, r), get(k << 1 | 1, mid + 1, R, l, r));
}
int main() {
  long k, q;
  scanf("%ld%ld%ld%ld%ld", &n, &k, &A, &B, &q);
  while (q--) {
    long type, d, x;
    scanf("%ld%ld", &type, &d);
    if (type == 1)
      scanf("%ld", &x), update(1, 1, n, d, d, x);
    else {
      long res = get(1, 1, n, 1, d - 1).pre + get(1, 1, n, d + k, n).suf;
      printf("%ld\n", res);
    }
  }
  return 0;
}
