#include <bits/stdc++.h>
using namespace std;
struct node {
  int l, r, res;
} typedef Node;
Node seg[2][200005 * 4];
void seg_init(int t, int x, int l, int r) {
  seg[t][x].l = l;
  seg[t][x].r = r;
  seg[t][x].res = 0;
  if (l == r - 1) {
    return;
  }
  int mid = (l + r) / 2;
  seg_init(t, x * 2, l, mid);
  seg_init(t, x * 2 + 1, mid, r);
}
int seg_set(int t, int x, int idx, int num, int lim) {
  if (seg[t][x].l == seg[t][x].r - 1 && seg[t][x].l == idx) {
    int tmp = seg[t][x].res;
    seg[t][x].res += num;
    seg[t][x].res = min(seg[t][x].res, lim);
    return seg[t][x].res - tmp;
  }
  int mid = (seg[t][x].l + seg[t][x].r) / 2;
  if (idx < mid) {
    int tmp = seg_set(t, x * 2, idx, num, lim);
    seg[t][x].res += tmp;
    return tmp;
  } else {
    int tmp = seg_set(t, x * 2 + 1, idx, num, lim);
    seg[t][x].res += tmp;
    return tmp;
  }
}
int seg_get(int t, int x, int l, int r) {
  if (r - l < 1) return 0;
  if (seg[t][x].l == l && seg[t][x].r == r) {
    return seg[t][x].res;
  }
  int mid = (seg[t][x].l + seg[t][x].r) / 2;
  if (r <= mid) {
    return seg_get(t, x * 2, l, r);
  } else if (l >= mid) {
    return seg_get(t, x * 2 + 1, l, r);
  } else {
    return seg_get(t, x * 2, l, mid) + seg_get(t, x * 2 + 1, mid, r);
  }
}
int main() {
  int n, k, a, b, q;
  cin >> n >> k >> a >> b >> q;
  seg_init(0, 1, 0, n);
  seg_init(1, 1, 0, n);
  while (q--) {
    int ty;
    cin >> ty;
    if (ty == 1) {
      int di, ai;
      cin >> di >> ai;
      int tt = seg_set(0, 1, di - 1, ai, a);
      int ttt = seg_set(1, 1, di - 1, ai, b);
    } else {
      int pn;
      cin >> pn;
      cout << seg_get(1, 1, 0, pn - 1) + seg_get(0, 1, pn + k - 1, n) << endl;
    }
  }
  return 0;
}
