#include <bits/stdc++.h>
using namespace std;
long long n, k, a, b;
const long long MAXN = 2 * 100 * 1000;
struct SGTree {
  long long PR;
  long long t[5 * MAXN + 10];
  void upd(long long cn, long long b, long long e, long long i, long long v) {
    if (i <= b && e <= i) {
      t[cn] = min(PR, t[cn] + v);
      return;
    }
    if (i < b || i > e) return;
    long long m = (b + e) / 2LL;
    upd(2LL * cn, b, m, i, v);
    upd(2LL * cn + 1LL, m + 1LL, e, i, v);
    t[cn] = t[2LL * cn] + t[2LL * cn + 1LL];
  }
  long long get(long long cn, long long b, long long e, long long l,
                long long r) {
    if (l > r) return 0LL;
    if (l <= b && e <= r) return t[cn];
    if (r < b || l > e) return 0LL;
    long long m = (b + e) / 2LL;
    return get(2LL * cn, b, m, l, r) + get(2LL * cn + 1LL, m + 1LL, e, l, r);
  }
};
SGTree t0, t1;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  long long q;
  cin >> n >> k >> a >> b >> q;
  long long N = n;
  t0.PR = b;
  t1.PR = a;
  for (int i = 0; i < q; i++) {
    int tp;
    cin >> tp;
    if (tp == 1) {
      long long di, ai;
      cin >> di >> ai;
      t0.upd(1, 1, N, di, ai);
      t1.upd(1, 1, N, di, ai);
    } else {
      long long p;
      cin >> p;
      long long rs = t0.get(1, 1, N, 1, p - 1LL);
      rs += t1.get(1, 1, N, p + k, N);
      cout << rs << "\n";
    }
  }
  cout.flush();
}
