#include <bits/stdc++.h>
using namespace std;
struct PT {
  long long a, b, c;
};
long long n, k, A, B, q;
vector<PT> T;
void update(int i, int L, int R, int P, int x) {
  if (L + 1 == R) {
    T[i].c += x;
    T[i].a = min(A, T[i].c);
    T[i].b = min(B, T[i].c);
    return;
  }
  int M = L + (R - L) / 2;
  if (P < M) {
    update(2 * i, L, M, P, x);
  } else {
    update(2 * i + 1, M, R, P, x);
  }
  T[i].a = T[2 * i].a + T[2 * i + 1].a;
  T[i].b = T[2 * i].b + T[2 * i + 1].b;
}
long long get(int i, int L, int R, int A, int B, int x) {
  if (A >= B) {
    return 0;
  }
  if (A == L && B == R) {
    if (x == 1) {
      return T[i].a;
    }
    return T[i].b;
  }
  int M = L + (R - L) / 2;
  long long G1 = get(2 * i, L, M, A, min(B, M), x);
  long long G2 = get(2 * i + 1, M, R, max(A, M), B, x);
  return G1 + G2;
}
int main() {
  cin >> n >> k >> A >> B >> q;
  T.resize(4 * n);
  for (int i = 0; i < q; i++) {
    int w;
    cin >> w;
    if (w == 1) {
      int v, u;
      cin >> v >> u;
      update(1, 0, n, v - 1, u);
    }
    if (w == 2) {
      int l, r;
      cin >> l;
      r = l + k;
      l--;
      r--;
      if (l == 0) {
        cout << get(1, 0, n, r, n, 1) << endl;
        continue;
      }
      if (r >= n) {
        cout << get(1, 0, n, 0, l, 2) << endl;
        continue;
      }
      cout << get(1, 0, n, 0, l, 2) + get(1, 0, n, r, n, 1) << endl;
    }
  }
  return 0;
}
