#include <iostream>
#include <vector>
#include <deque>
#include <stack>
#include <queue>
#include <list>
#include <cstring>
#include <string.h>
#include <cmath>
#include <string>
#include <sstream>
#include <cctype>
#include <iomanip>

using namespace std;

typedef long long ll;

// số phép đã xóa nhằm xác định chỉ số lúc idx
int idxDelete = 0;
const int N = 1e5 + 5;
// first laf ll, second = int;
// day giam dan
pair<ll, int> arr[N];
// chỉ số hiện tại khi thưcj hiện truy vấn thêm
int cur = 0;
// sum là chỉ số từ 1 tới i
ll prefixSum[N];
int first = 0; // là phần tử dầu của arr
int last = 0; // là phần tử cuối của arr

// mang hienj tai
// int a[N];

// first la idx, second la value
// queue<pair<int, ll>> q;

bool canDelete() {
    return cur > idxDelete;
}

// Tra ve idx thoa man
int binarySearch() {
    int l = first;
    int r = last - 1;
    int ans = -1;
    while (l <= r) {
        int mid = (l + r) / 2;
        // thoa man
        // mamg giam dan
        if (arr[mid].first > prefixSum[cur] + prefixSum[idxDelete]) {
            l = mid + 1;
            ans = mid;
        }
        else {
            r = mid - 1;
        }
    }
    return ans;
}

void insertValue(int x)
{
    prefixSum[cur + 1] = prefixSum[cur] + x;
    while (first < last && arr[last - 1].first <= prefixSum[cur + 1]) {
        --last;
    }
    arr[last] = {prefixSum[cur + 1], cur + 1};
    ++last;
    ++cur;
}

// Hàm xóa số ở đầu dãy
void deleteFromFront()
{
    if (!canDelete()) {
        return;
    }
    if (first < last && arr[first].second == idxDelete + 1) {
        ++first;
    }
    ++idxDelete;
}

// Hàm truy vấn độ dài hậu tố dài nhất có tổng không âm
int findLongestNonNegativeSuffix()
{
    int idx = binarySearch();
    if (idx == -1) {
        return idx;
    }
    return cur - arr[idx].second;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int q;
    cin >> q; 

    for (int i = 0; i < q; i++)
    {
        int op;
        cin >> op;

        if (op == 1)
        {
            int x;
            cin >> x;
            insertValue(x);
        }
        else if (op == 2)
        {
            // TODO: Kiểm tra nếu dãy không rỗng thì mới xóa
            deleteFromFront();
        }
        else if (op == 3)
        {
            int ans = findLongestNonNegativeSuffix(/* TODO: Các tham số cần thiết */);
            cout << ans << "\n";
        }
    }
    return 0;
}