rt
#include<bits/stdc++.h>
using namespace std;
struct node{
int t,l,r;
friend bool operator<(node a,node b){
return a.t>b.t;
}
}a[114514];
queue<node> wtque;
priority_queue<node> que;
int pre[114514],nxt[114514];
int l[114514],r[114514];
int st=1,ed=2,cnt=3;
int T,M,P,n,ans1,ans2;
void del(int k){
nxt[pre[k]]=nxt[k];
pre[nxt[k]]=pre[k];
return ;
}
void inse(int p,int ll,int rr){
pre[++cnt]=p;
nxt[cnt]=nxt[p];
pre[nxt[cnt]]=cnt;
nxt[p]=cnt;
l[cnt]=ll,r[cnt]=rr;
if(pre[cnt]!=st&&r[pre[cnt]]+1==l[cnt]){
l[cnt]=l[pre[cnt]];
del(pre[cnt]);
}
if(nxt[cnt]!=ed&&r[cnt]+1==l[nxt[cnt]]){
r[cnt]=r[nxt[cnt]];
del(nxt[cnt]);
}
return ;
}
void add(int ll,int rr){
for(int i=st;i!=ed;i=nxt[i]){
if(rr>r[nxt[i]]){
continue;
}
inse(i,ll,rr);
return ;
}
return ;
}
bool fi(int t,int m,int p){
for(int i=nxt[st];i!=ed;i=nxt[i]){
int len=r[i]-l[i]+1;
if(len<m){
continue;
}else if(len==m){
que.push({l[i],r[i],t+p});
del(i);
return true;
}else{
que.push({l[i],l[i]+m-1,t+p});
l[i]+=m;
return true;
}
}
return false;
}
int main(){
cin>>n;
nxt[st]=3,pre[3]=st;
nxt[3]=ed,pre[ed]=3;
l[3]=0,r[3]=n-1;
l[st]=-1,r[st]=-1;
l[ed]=n,r[ed]=n;
while(cin>>T>>M>>P){
if(!T&&!M&&!P){
break;
}
while(!que.empty()&&que.top().t<=T){
int t=que.top().t;
while(!que.empty()&&que.top().t==t){
auto tmp=que.top();
que.pop();
add(tmp.l,tmp.r);
}
while(!wtque.empty()){
auto tmp=wtque.front();
if(fi(t,tmp.r,tmp.t)==true){
wtque.pop();
continue;
}
break;
}
}
if(fi(T,M,P)){
continue;
}else{
wtque.push({T,M,P});
ans2++;
}
}
while(!que.empty()){
int t=que.top().t;
while(!que.empty()&&que.top().t==t){
auto tmp=que.top();
ans1=tmp.t;
que.pop();
add(tmp.l,tmp.r);
}
while(!wtque.empty()){
auto tmp=wtque.front();
if(fi(t,tmp.r,tmp.t)==true){
wtque.pop();
continue;
}
break;
}
// cout<<ans1<<" ";
}
cout<<ans1<<endl<<ans2<<endl;
return 0;
}
/*
In The Luogu:
I'm _oHAMBURGERo_.
I AK IOI every day!
*/