#include<bits/stdc++.h>
#define ll long long
#define i128 __int128
#define ull unsigned long long
#define pii pair<int,int>
#define pll pair<long long, long long>
#define fs first
#define sc second
#define x0 _x0_
#define y1 _y1_
#define endl '\n'
#define re register
#define pb push_back
#define vi vector<int>
#define pq priority_queue
#define mem(a,x) memset((a),(x),sizeof(a))
#define debug puts("AK IOI")
#define sz(s) (int)(s.size())
#define all(a) a.begin(),a.end()
#define rd(l,r) (myrand()%(r-l+1)+l)
#define print(x) {cout<<x<<endl;return;}
#define ctn(e) if(e) continue
#define brk(e) if(e) break
#define rt(e) if(e) return
#define ll_(e) (1ll*(e))
#define For(x,y,z) for(int x = y;x <= z;x++)
#define For_(x,y,z) for(int x = y;x >= z;x--)
#define double long double
#define mkp make_pair
using namespace std;
#define int long long
const int mod = 1e9+7;
mt19937 myrand(time(0));
const int inf = 0x3f3f3f3f,N = 5e4+5;
const long long linf = 0x3f3f3f3f3f3f3f3f;
struct node{int a,b,c,d,id;bool ch;int mx,val;}a[N],vis[N];
bool operator==(node x,node y) {return x.a==y.a&&x.b==y.b&&x.c==y.c&&x.d==y.d;}
int _unique[N],id1[N],id2[N],tree[N],n;
inline bool main_cmp(node x,node y) {return x.a^y.a?x.a<y.a:(x.b^y.b?x.b<y.b:(x.c^y.c?x.c<y.c:x.d<y.d));}
inline bool CDQ_cmp(node x,node y) {return x.b^y.b?x.b<y.b:(x.c^y.c?x.c<y.c:(x.d^y.d?x.d<y.d:x.a<y.a));}
inline bool cdq_cmp(node x,node y) {return x.c^y.c?x.c<y.c:(x.d^y.d?x.d<y.d:(x.a^y.a?x.a<y.a:x.b<y.b));}
inline void add(int x,int w) {for(;x<=_unique[0];x+=x&(-x)) if(tree[x]<w) tree[x]=w;else return;}
inline void clear(int x) {for(;x<=_unique[0];x+=x&(-x)) if(tree[x]) tree[x]=0;else return;}
inline int query(int x) {int res=0;for(;x;x-=x&(-x)) res=max(res,tree[x]);return res;}
inline void cdq(int l,int r){
if(l==r)return;int mid=(l+r)>>1;
cdq(l,mid);
sort(a+l,a+1+mid,cdq_cmp),sort(a+mid+1,a+1+r,cdq_cmp);
int j=l,i=mid+1;
while(i<=r&&j<=mid){
if(a[j].c<=a[i].c){if(a[j].ch)add(a[j].d,a[j].mx);j++;}
else {if(!a[i].ch) a[i].mx=max(a[i].mx,query(a[i].d)+a[i].val);i++;}
} while(i<=r) {if(!a[i].ch) a[i].mx=max(a[i].mx,query(a[i].d)+a[i].val);i++;}
For(k,l,j-1) if(a[k].ch) clear(a[k].d);For(i,l,r) vis[id2[a[i].id]]=a[i];
For(i,l,r)a[i]=vis[i];cdq(mid+1,r);
}inline void CDQ(int l,int r){
if(l==r)return ;int mid = (l+r)>>1;CDQ(1,mid);
For(i,l,r) a[i].ch=(i<=mid); sort(a+l,a+1+r,CDQ_cmp);For(i,l,r) id2[a[i].id]=i;
cdq(l,r);For(i,l,r) vis[id1[a[i].id]]=a[i];For(i,l,r) a[i]=vis[i]; CDQ(mid+1,r);
}inline void solve(){
cin>>n;For(i,1,n){cin>>a[i].a>>a[i].b>>a[i].c>>a[i].d>>a[i].val;_unique[i]=a[i].d;}
sort(_unique+1,_unique+1+n),_unique[0]=unique(_unique+1,_unique+1+n)-_unique-1,sort(a+1,a+1+n,main_cmp);
For(i,1,n)a[i].d=lower_bound(_unique+1,_unique+1+_unique[0],a[i].d)-_unique;
int cnt=0;For(i,1,n) if(a[i]==a[i-1]) a[cnt].val+=max(0ll,a[i].val);else a[++cnt]=a[i]; n=cnt;
For(i,1,n) a[i].mx=a[i].val,a[i].id=id1[i]=i;
CDQ(1,n);int maxn=-1e17;For(i,1,n)maxn=max(maxn,a[i].mx);cout<<maxn;
}signed main(){
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int T=1;
For(_,1,T) solve();
return 0;
}