#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e6+7;
const int mod = 1e9 + 7;
typedef pair<int, int> ii;
typedef pair<int, pair<int, int>> iii;
#define fi first
#define se second
#define read(_a, n) for(int i = 1; i <= n; i++) cin >> _a[i]
#define For(i, _a, _b) for(int i = _a; i <= _b; i++)
#define fastIO ios_base::sync_with_stdio(false); cin.tie(0);
#define File(_x,_y) if (fopen(_x, "r")) freopen(_x, "r", stdin)//,freopen(_y, "w", stdout)
#define file "main"
#define bit(x, i) ((x >> i) & 1)
#define bat(x, i) (x | (1 << i))

int T[maxn];
int n, m, res, kq[maxn];
vector<int> b;

void nenso()
{
    sort(b.begin(), b.end());
    b.erase(unique(b.begin(), b.end()), b.end());
}

int num(int n)
{
    return lower_bound(b.begin(), b.end(), n) - b.begin() + 1;
}

int g_num(int n)
{
    return b[n-1];
}

void update(int i, int v)
{
    for (; i<=1e6+5; i += i&(-i)) T[i]=(T[i]+ v);
}
int get(int i)
{
    int res = 0;
    for (; i>0; i -= i&(-i)) res = (T[i]+ res);
    return res;
}

struct query
{
    char t;
    int val;
    int l, r, k;
} q[maxn];

int cal(int k, int l, int r)
{
    int L = l;
    int res = 2e9;
    if(k > get(r)-get(l-1)) return 0;
    while(l <= r)
    {
        int mid = (l+r) >> 1;
        if(get(mid) - get(L-1) >= k)
        {
            res = mid;
            r = mid-1;
        }
        else l = mid+1;
    }
    return b[res-1];
}

int32_t main()
{
    fastIO;
    File(file ".inp", file ".out");

    cin >> n;
    For(i, 1, n)
    {
        cin >> q[i].t;
        if(q[i].t == '?')
        {
            cin >> q[i].k>> q[i].l >> q[i].r ;
            b.push_back(q[i].l); b.push_back(q[i].r);
        }
        else cin >> q[i].val, b.push_back(q[i].val);
    }
    nenso();
    For(i, 1, n)
    {
        if(q[i].t == '+')
        {
            update(num(q[i].val), 1);
        }
        else if(q[i].t == '-')
        {
            update(num(q[i].val), -1);
        }
        else
        {
            if(cal(q[i].k, num(q[i].l), num(q[i].r)) == 0) cout << "0\n";
            else cout << cal(q[i].k, num(q[i].l), num(q[i].r)) << '\n';
        }
    }

}
