#include <bits/stdc++.h>
using namespace std;
struct Node {
  int pos, l, idx;
  Node() {}
  Node(int a, int b, int c) : pos(a), l(b), idx(c) {}
  bool operator<(Node cmp) const { return pos < cmp.pos; }
};
vector<Node> vec;
int main() {
  int L, B, F;
  cin >> L >> B >> F;
  int n;
  cin >> n;
  int id = 1;
  while (n--) {
    int a, b;
    cin >> a >> b;
    if (a == 1) {
      sort(vec.begin(), vec.end());
      if ((vec.size() == 0 && b <= L) ||
          (vec.size() != 0 && b + F <= vec[0].pos)) {
        vec.push_back(Node(0, b, id));
        printf("%d\n", 0);
      } else {
        bool flag = false;
        for (int i = 1; i < vec.size(); i++) {
          if (vec[i].pos - vec[i - 1].pos - vec[i - 1].l >= b + B + F) {
            vec.push_back(Node(vec[i - 1].pos + vec[i - 1].l + B, b, id));
            printf("%d\n", vec[i - 1].pos + vec[i - 1].l + B);
            flag = true;
            break;
          }
        }
        if (!flag) {
          if (vec.size() && vec.back().pos + vec.back().l + B + b <= L) {
            printf("%d\n", vec.back().pos + vec.back().l + B);
            vec.push_back(Node(vec.back().pos + vec.back().l + B, b, id));
          } else {
            puts("-1");
          }
        }
      }
    } else {
      for (int i = 0; i < vec.size(); i++) {
        if (vec[i].idx == b) {
          vec.erase(vec.begin() + i);
          break;
        }
      }
    }
    id++;
  }
  return 0;
}
