{
TASK: festa
LANG: PASCAL
}
program festa;

const
	MAXH					= 200000;

type
	Integer					= LongInt;
	PNode					= ^TNode;
	TNode					= record
		v, i				: Integer;
		l, r				: PNode;
	end;
	THouse					= record
		i, v				: Integer;
	end;

var
	root					: PNode;
	h					: Array [1 .. MAXH] of THouse;
	sum					: Array [0 .. MAXH] of Integer;
	c, s, i, v, hn, j, l, r, sl, sr		: Integer;
	min, imin				: Integer;

procedure add(var p: PNode; i, v: Integer);
begin
	if (p^.i = i) then begin
		inc(p^.v);
		Exit;
	end;
	if (p^.i > i) then begin
		if (p^.l = nil) then begin
			new(p^.l);
			p^.l^.i := i;
			p^.l^.v := v;
			p^.l^.l := nil;
			p^.l^.r := nil;
		end else
			add(p^.l, i, v);
	end else begin
		if (p^.r = nil) then begin
			new(p^.r);
			p^.r^.i := i;
			p^.r^.v := v;
			p^.r^.l := nil;
			p^.r^.r := nil;
		end else
			add(p^.r, i, v);
	end;
end;

procedure query(p: PNode);
begin
	if (p^.l <> nil) then
		query(p^.l);
	if (p^.i > 0) then begin
		hn := hn + 1;
		h[hn].i := p^.i;
		h[hn].v := p^.v;
	end;
	if (p^.r <> nil) then
		query(p^.r);
end;

function su(x, y: Integer): Integer;
begin
	if (x > y) then su := 0
        else
	su := sum[y] - sum[x-1];
end;

procedure destroyTree(var p: PNode);
begin
	if (p^.l <> nil) then destroyTree(p^.l);
	if (p^.r <> nil) then destroyTree(p^.r);
	dispose(p);
end;

begin
	root := nil;
	while (not eof) do begin
		read(c);
		if (c = 1) then begin
			readln(i, v);
			if (root = nil) then begin
				new(root);
				root^.i := i;
				root^.v := v;
				root^.l := nil;
				root^.r := nil;
			end else
				add(root, i, v);
		end else begin
			readln(s);
			hn := 0;
			query(root);
			min := maxlongint;
			sum[0] := 0;
			for i := 1 to hn do
				sum[i] := sum[i-1] + h[i].v;
			sl := 0; sr := 0;
			for i := 2 to hn do
				sr := sr + h[i].v * (h[i].i - h[1].i);
			j := 0;
			l := 0; r := 1;
			for i := h[1].i to h[hn].i do begin
				if (abs(sr+sl-s) < min) then begin
					min := abs(sr+sl-s);
					imin := i;
				end;
				if (j+1 <= hn) and (i = h[j+1].i) then begin
					l := l + 1; r := r + 1;
					sr := sr - su(r, hn);
					sl := sl + su(1, l);
                                        j := j + 1;
				end else begin
					sr := sr - su(r, hn);
					sl := sl + su(1, l);
				end;
			end;
			i := h[1].i - 1;
			sr := 0;
			for j := 1 to hn do
				sr := sr + h[j].v * (h[j].i - i);
			while (abs(sr-s) > abs(sr+su(1,hn))-s) do begin
				i := i - 1;
				sr := sr + su(1, hn);
			end;
			if (abs(sr-s) < min) then begin
				min := abs(sr-s);
				imin := i;
			end;
			sl := 0;
			i := h[hn].i + 1;
			for j := 1 to hn do
				sl := sl + h[j].v * (i - h[j].i);
			while (abs(sl-s) > abs(sl+su(1, hn))-s) do begin
				i := i + 1;
				sl := sl + su(1, hn);
			end;
			if (abs(sl-s) < min) then begin
				min := abs(sl-s);
				imin := i;
			end;
			writeln(imin, ' ', min);
		end;
	end;
	destroyTree(root);
end.
