#include <bits/stdc++.h>
using namespace std;
ifstream f(".in");
long long n, k, a, b, arbrep[800005], arbstr[800005], x, nr, poz, p, q, i, ans;
void updaterep(int nod, int st, int dr, int poz, int val) {
  int mij = (st + dr) / 2;
  if (st == dr) {
    if (val > a) {
      arbrep[nod] += a;
      arbrep[nod] = min(arbrep[nod], a);
      return;
    } else {
      arbrep[nod] += val;
      arbrep[nod] = min(arbrep[nod], a);
      return;
    }
  }
  if (poz <= mij) {
    updaterep(2 * nod, st, mij, poz, val);
  } else {
    updaterep(2 * nod + 1, mij + 1, dr, poz, val);
  }
  arbrep[nod] = arbrep[2 * nod] + arbrep[2 * nod + 1];
}
void updatestr(int nod, int st, int dr, int poz, int val) {
  int mij = (st + dr) / 2;
  if (st == dr) {
    if (val > b) {
      arbstr[nod] += b;
      arbstr[nod] = min(arbstr[nod], b);
      return;
    } else {
      arbstr[nod] += val;
      arbstr[nod] = min(arbstr[nod], b);
      return;
    }
  }
  if (poz <= mij) {
    updatestr(2 * nod, st, mij, poz, val);
  } else {
    updatestr(2 * nod + 1, mij + 1, dr, poz, val);
  }
  arbstr[nod] = arbstr[2 * nod] + arbstr[2 * nod + 1];
}
void querystr(int nod, int st, int dr, int L, int R) {
  int mij = (st + dr) / 2;
  if (st >= L && dr <= R) {
    ans += arbstr[nod];
    return;
  }
  if (st > R || dr < L) {
    return;
  }
  querystr(2 * nod, st, mij, L, R);
  querystr(2 * nod + 1, mij + 1, dr, L, R);
}
void queryrep(int nod, int st, int dr, int L, int R) {
  int mij = (st + dr) / 2;
  if (st >= L && dr <= R) {
    ans += arbrep[nod];
    return;
  }
  if (st > R || dr < L) {
    return;
  }
  queryrep(2 * nod, st, mij, L, R);
  queryrep(2 * nod + 1, mij + 1, dr, L, R);
}
int main() {
  cin >> n >> k >> a >> b >> q;
  for (i = 1; i <= q; i++) {
    cin >> x;
    if (x == 1) {
      cin >> poz >> nr;
      updaterep(1, 1, n, poz, nr);
      updatestr(1, 1, n, poz, nr);
    } else {
      cin >> p;
      ans = 0;
      querystr(1, 1, n, 1, p - 1);
      queryrep(1, 1, n, k + p, n);
      cout << ans << '\n';
    }
  }
  return 0;
}
