#include <iostream>
#include <string.h>
#include <queue>
using namespace std;
//定义
const int MAXN = 100000 + 100;
struct Jiao_Tong_Gong_Ju{
int Reso;
int Price;
int Time;
}JT[MAXN];
struct You_Hui{
int Start_Time;
int Up_Limit;
}YH[MAXN];
int n,ans,Head = 0;
//优先队列维护
void Maintain(int Time){
int i = 0;
while(Time - YH[i].Start_Time > 45){ Head = i; i++; }
}
int main(){
//输入&初始化
scanf("%d",&n);
for(int i = 0;i < n;i ++) {
int resolution, P, T;
scanf("%d%d%d", &resolution, &P, &T);
JT[i].Reso = resolution;
JT[i].Price = P;
JT[i].Time = T;
if (resolution == 0) {
YH[i].Up_Limit = P;
YH[i].Start_Time = T;
ans += P;
}
Maintain(T);
if(resolution == 1){
for(int j = Head;j <= i;j ++){
if(JT[i].Price <= YH[j].Up_Limit && JT[i].Time - YH[j].Start_Time <= 45){
YH[j].Up_Limit = 99999999;
YH[j].Start_Time = -1000000000 - 100;
goto outer;
}
}
ans += P;
}
outer:continue;
}
//输出
printf("%d",ans);
}