#include<bits/stdc++.h>
using namespace std;
//乘车时间,由于要考虑优惠券叠加的情况,需要开数组进行统计
bool s[100005];//统计优惠券是否使用过
int p1[100005];//票价
int n, t[100006], t1[100006]; //上车时间
int c[100001], q = 1; //地铁票价
int type[100006];
int a=1;
/*
struct node {
int ty,p,tb,ts;
}a[10006];
*/
bool is_use = false;
int ans, bybus = 1; //坐了几次地铁
int main() {
//freopen("P5661_1.in", "r", stdin);
// freopen("P5661_1.out", "w", stdout);
scanf("%d",&n);
for (int i = 1; i <= n; i++) {
scanf("%d%d%d",&type[i],&p1[i],&t[i]);
// cin >> type[i] >> p1[i] >> t[i];
if (type[i] == 0) {
c[q] = p1[i]; //当时判断出来了这个是地铁要把价格存进去
t1[q] = t[i];
q++;
}
}
for (int i = 1; i <= n; i++) {//i就是你坐的车的编号
if (type[i] == 0) {
s[bybus] = 1;
bybus++;//如果是地铁则获得优惠券
ans += p1[i];//票价
// cout << "乘坐地铁花费了" << p1[i] << " 已经花费了" << ans << endl;
} else {
/*
三种情况
一种是没有优惠券: 加上价格
第二种是有优惠券,但是无法保证是否过期
*/
if (bybus == 1) {//花钱(因为没有优惠券)
ans += p1[i];
// cout << "乘坐地铁花费了" << p1[i] << " 已经花费了" << ans << endl << endl;
} else {
for (int j = a; j <= bybus; j++) { //检查优惠券,先查看有没有 j相当于寻找优惠券找到的第几张
// cout<<"查找优惠券中... 这个是第"<<j<<" "<<c[j]<<endl<<endl;
if (s[j] == 1 && p1[i] <= c[j]) {//p1[i]就是当前这辆车的票价,c[j]就是那辆地铁的票价
//如果有的话,再判断超时没有,超过票价没有
if (t[i] - t1[j] <= 45) { //这个时候,t[j]一定是购票时间
//如果可以用,因为是从第一次开始算的,肯定是最旧的,,所以不需要额外判断了
// cout<<"成功使用了优惠券,所以这次坐公交车没花钱"<<endl<<endl;
s[j] = 0; //将票作废
a++;
is_use = 1;
break;//由于已经使用了,便可以进入下一循环了
}
}
}//遍历完了还没有找到就正常付钱
if (is_use == 0) {//保证没有使用才花钱
ans += p1[i];
//记得将标签还原
} else {
is_use = 0;
}
}
}
}
cout << ans;
return 0;
}