#include<iostream>
#include<algorithm>
using namespace std;
const int N=5010;
int n;//实时记录总共的信息数
typedef long long ll;
struct Record{
int type;//1 buy 2 sell
double p;
int s;
bool del;
}d[N];
int main(){
string type;
while(cin>>type){
if(type=="buy"){
double p;
int s;
cin>>p>>s;
d[++n]={1,p,s};
}else if(type=="sell"){
double p;
int s;
cin>>p>>s;
d[++n]={2,p,s};
}else{
int id;
cin>>id;
d[id].del=true;//去看哪一条语句要被删除了
d[++n].del=true;//自己cancel这一句也要记录 但是没有p和s 也算del=true
}
}
double resp;//开盘价
ll ress=0;//成交量 可能爆
for(int i=1;i<=n;i++){//这也是刚刚需要记录n的一个用处
if(d[i].del!=true){
double p=d[i].p;//取这个记录的价格
ll s1=0,s2=0;//一定要每次初始化=0!!!!!!不然for循环回来会累加!!
// 出价至少为p0的买单的总股数 出价至多为p0的卖单的总股数
for(int j=1;j<=n;j++){
if(d[j].del!=true){
if(d[j].type==1&&d[j].p>=p){
s1+=d[j].s;
}else if(d[j].type==2&&d[j].p<=p){
s2+=d[j].s;
}
}
}
ll t=min(s1,s2);//如果有多个符合条件的开盘价,你的程序应当输出最高的那一个。
if(t>ress||(t==ress&&p>resp)){//更新的前提是 成交量更高或者成交量一样但是开盘价更高
resp=p;
ress=t;
}
}
}
printf("%.2lf %lld\n",resp,ress);
return 0;
}