#include <bits/stdc++.h>
#define maxn 1000100
#define inf 2000000005
using namespace std;
typedef long long ll;
int sum = 0, rt = 0;
int size[maxn];
int v[maxn];
int num[maxn];
int rd[maxn];
int son[maxn][2];
int last = 0;
int o1, o2, o3;
int mi = inf;
int ma = 0;
int flowers = 0;
int flower[maxn];
bool money[maxn];
void pushup(int p) {
size[p] = size[son[p][0]] + size[son[p][1]] + num[p];
}
void rotate(int &p, int d) {
int k = son[p][d ^ 1];
son[p][d ^ 1] = son[k][d];
son[k][d] = p;
pushup(p);
pushup(k);
p = k;
}
void ins(int &p, int x) {
if (!p) {
p = ++sum;
size[p] = num[p] = 1;
v[p] = x;
rd[p] = rand();
return;
}
if (v[p] == x) {
return;
}
int d = (x > v[p]);
ins(son[p][d], x);
if (rd[p] < rd[son[p][d]])
rotate(p, d ^ 1);
pushup(p);
}
void del(int &p, int x) {
if (!p)
return;
if (x < v[p])
del(son[p][0], x);
else if (x > v[p])
del(son[p][1], x);
else {
if (!son[p][1] && !son[p][0]) {
num[p]--;
size[p]--;
if (num[p] == 0)
p = 0;
} else if (son[p][0] && !son[p][1]) {
rotate(p, 1);
del(son[p][1], x);
} else if (son[p][1] && !son[p][0]) {
rotate(p, 0);
del(son[p][0], x);
} else if (son[p][0] && son[p][1]) {
int d = (rd[son[p][0]] > rd[son[p][1]]);
rotate(p, d);
del(son[p][d], x);
}
}
pushup(p);
}
int _rank(int p, int x) {
if (!p)
return 1;
if (v[p] == x)
return size[son[p][0]] + 1;
if (v[p] < x)
return size[son[p][0]] + num[p] + _rank(son[p][1], x);
if (v[p] > x)
return _rank(son[p][0], x);
}
int find(int p, int x) {
if (!p)
return 0;
if (size[son[p][0]] >= x)
return find(son[p][0], x);
else if (size[son[p][0]] + num[p] < x)
return find(son[p][1], x - num[p] - size[son[p][0]]);
else
return v[p];
}
int pre(int p, int x) {
if (!p)
return -inf;
if (v[p] >= x)
return pre(son[p][0], x);
else
return max(v[p], pre(son[p][1], x));
}
int suc(int p, int x) {
if (!p)
return inf;
if (v[p] <= x)
return suc(son[p][1], x);
else
return min(v[p], suc(son[p][0], x));
}
template<typename T>inline void read(T &ff) {
T rr = 1;
ff = 0;
register char ch = getchar();
while (!isdigit(ch)) {
if (ch == '-')
rr = -1;
ch = getchar();
}
while (isdigit(ch)) {
ff = (ff << 1) + (ff << 3) + (ch ^ 48);
ch = getchar();
}
ff *= rr;
}
void build() {
long long ans1 = 0;
long long ans2 = 0;
for (int i = 1; i <= sum; i++) {
if (num[i]) {
ans1 += v[i];
ans2 += flower[v[i]];
}
}
cout << ans2 << ' ' << ans1;
}
int main() {
freopen("1.in", "r", stdin);
while (1) {
read(o1);
if (o1 == -1) {
build();
break;
} else if (o1 == 1) {
read(o2);
read(o3);
if (!money[o3]) {
flowers++;
ins(rt, o3);
flower[o3] = o2;
mi = min(mi, o3);
ma = max(ma, o3);
money[o3] = true;
}
} else if (o1 == 2) {
if (flowers >= 1) {
del(rt, ma);
flower[ma] = 0;
money[ma] = false;
flowers--;
}
} else {
if (flowers >= 1) {
del(rt, mi);
flower[mi] = 0;
money[mi] = false;
flowers--;
}
}
}
return 0;
}