//#define _DEBUG_
#include <cstdio>
#ifdef _DEBUG_
#include <iostream>
#endif
#include <algorithm>
using namespace std;
struct stalp
{
int X, C, S, D;
};
const int MAX_N = 100005;
const long long INF = 1LL << 60;
const int NOT_FOUND = -2000000000;
const int MAX_ARB = 262144;
int N;
stalp A[MAX_N];
int XX[MAX_N];
long long ARB[MAX_ARB];
inline bool cmp(const stalp &A, const stalp &B)
{
return A.D < B.D;
}
inline long long min(long long x, long long y)
{
return x<y ? x : y;
}
void build(int n, int lo, int hi)
{
ARB[n]=INF;
if(lo==hi)
return;
build(2*n, lo, (lo+hi)/2);
build(2*n+1, (lo+hi)/2+1, hi);
}
void insert(int n, int lo, int hi, const int &p, const int &value)
{
if(lo==hi)
{
ARB[n]=value;
return;
}
if(p<=(lo+hi)/2)
insert(2*n, lo, (lo+hi)/2, p, value);
else
insert(2*n+1, (lo+hi)/2+1, hi, p, value);
ARB[n]=min(ARB[2*n], ARB[2*n+1]);
}
int bin_search(const int &value, int lo, int hi)
{
if(lo>hi)
return NOT_FOUND;
if(XX[(lo+hi)/2]>=value)
return bin_search(value, lo, (lo+hi)/2-1);
int tmp=bin_search(value, (lo+hi)/2+1, hi);
return tmp==NOT_FOUND ? XX[(lo+hi)/2] : tmp;
}
int bin_search2(const int &value, int lo, int hi)
{
if(lo>hi)
return -1;
if(A[(lo+hi)/2].D<value)
return bin_search2(value, (lo+hi)/2+1, hi);
int tmp=bin_search2(value, lo, (lo+hi)/2-1);
return tmp==-1 ? (lo+hi)/2 : tmp;
}
long long query(int n, int lo, int hi, const int &LI, const int &LS)
{
if(LI<=lo && hi<=LS)
return ARB[n];
long long value=INF;
if(LI<=(lo+hi)/2)
value=query(2*n, lo, (lo+hi)/2, LI, LS);
if(LS>(lo+hi)/2)
value=min(value, query(2*n+1, (lo+hi)/2+1, hi, LI, LS));
return value;
}
void solve()
{
long long value;
int tmp, p;
for(int i=0; i<N; ++i)
{
value=INF;
tmp=bin_search(A[i].S, 0, N-1);
if(tmp==NOT_FOUND)
value=A[i].C;
else
{
p=bin_search2(tmp, 0, N-1);
if(p!=-1)
{
value=A[i].C+query(1, 0, N-1, p, N-1);
if(value>INF)
value=INF;
}
}
insert(1, 0, N-1, i, value);
}
}
int main()
{
freopen("stalpi.in", "r", stdin);
freopen("stalpi.out", "w", stdout);
scanf("%d", &N);
for(int i=0; i<N; ++i)
{
scanf("%d %d %d %d", &A[i].X, &A[i].C, &A[i].S, &A[i].D);
A[i].S = A[i].X - A[i].S;
A[i].D += A[i].X;
}
sort(A, A+N, cmp);
for(int i=0; i<N; ++i)
XX[i] = A[i].X;
sort(XX, XX+N);
#ifdef _DEBUG_
for(int i=0; i<N; ++i)
cerr<<A[i].D<<" ";
cerr<<endl;
for(int i=0; i<N; ++i)
cerr<<XX[i]<<" ";
cerr<<endl;
#endif
build(1, 0, N-1);
solve();
int p=bin_search2(XX[N-1], 0, N-1);
printf("%Ld\n", query(1, 0, N-1, p, N-1));
return 0;
}