#include <fstream>
#include <algorithm>
#define NMAX 100'000
#define INF 2100000000
using namespace std;
ifstream cin("stalpi.in");
ofstream cout("stalpi.out");
struct stalp{
int x, c, s, d;
}v[NMAX + 1];
bool cmp(stalp a, stalp b) {
return a.x < b.x;
}
int aint[NMAX * 4], cost[NMAX + 1], ok;
void update(int p, int lInt, int rInt, int target, int x) {
if(lInt == rInt) {
if(ok)
aint[p] = min(x, aint[p]);
else
aint[p] = x;
return;
}
int med = (lInt + rInt) / 2, aux;
if(lInt <= target && target <= med) {
update(p * 2, lInt, med, target, x);
} else {
update(p * 2 + 1, med + 1, rInt, target, x);
}
aint[p] = min(aint[p * 2], aint[p * 2 + 1]);
}
int query(int p, int lInt, int rInt, int lTarget, int rTarget) {
if(lTarget <= lInt && rInt <= rTarget) {
return aint[p];
}
int med = (lInt + rInt) / 2, mn = INF;
if(lTarget <= med) {
mn = query(p * 2, lInt, med, lTarget, rTarget);
}
if(med + 1 <= rTarget) {
mn = min(query(p * 2 + 1, med + 1, rInt, lTarget, rTarget), mn);
}
return mn;
}
int main() {
int n, i, st, dr, mij, last;
cin>>n;
for(i = 1; i <= n; i++) {
cin>>v[i].x>>v[i].c>>v[i].s>>v[i].d;
update(1, 0, n, i, INF);
}
ok = 1;
sort(v + 1, v + n + 1, cmp);
for(i = 1; i <= n; i++) {
last = i;
st = 1;
dr = i;
while(st <= dr) {
mij = (st + dr) / 2;
if(v[mij].x < v[i].x - v[i].s) {
st = mij + 1;
} else {
last = mij;
dr = mij - 1;
}
}
v[i].s = last;
last = i;
st = i;
dr = n;
while(st <= dr) {
mij = (st + dr) / 2;
if(v[mij].x <= v[i].d + v[i].x) {
st = mij + 1;
last = mij;
} else {
dr = mij - 1;
}
}
v[i].d = last;
}
update(1, 0, n, v[1].d, v[1].c);
for(i = 2; i <= n; i++) {
int costMin = query(1, 0, n, v[i].s - 1, n);
update(1, 0, n, v[i].d, costMin + v[i].c);
}
cout<<query(1, 0, n, n, n);
return 0;
}