#include <bits/stdc++.h>
using namespace std;
const int DIM = 1e5 + 5;
struct Pillar {
int ps, cs, le, ri;
} plr[DIM];
int pos[DIM];
long long sgt[DIM << 2];
void build(int nd, int le, int ri) {
if (le == ri) {
if (le != 0)
sgt[nd] = (1LL << 60);
} else {
int md = (le + ri) >> 1;
build(nd << 1, le, md);
build(nd << 1 | 1, md + 1, ri);
sgt[nd] = min(sgt[nd << 1], sgt[nd << 1 | 1]);
}
}
void update(int nd, int le, int ri, int ps, long long vl) {
if (le == ri)
sgt[nd] = min(sgt[nd], vl);
else {
int md = (le + ri) >> 1;
if (ps <= md)
update(nd << 1, le, md, ps, vl);
else
update(nd << 1 | 1, md + 1, ri, ps, vl);
sgt[nd] = min(sgt[nd << 1], sgt[nd << 1 | 1]);
}
}
long long query(int nd, int le, int ri, int st, int en) {
if (st <= le and ri <= en)
return sgt[nd];
else {
int md = (le + ri) >> 1;
if (en <= md)
return query(nd << 1, le, md, st, en);
else if (md < st)
return query(nd << 1 | 1, md + 1, ri, st, en);
else
return min(query(nd << 1, le, md, st, en),
query(nd << 1 | 1, md + 1, ri, st, en));
}
}
int main(void) {
freopen("stalpi.in", "r", stdin);
freopen("stalpi.out", "w", stdout);
int n; scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%d %d %d %d", &plr[i].ps, &plr[i].cs, &plr[i].le, &plr[i].ri);
pos[i] = plr[i].ps;
}
sort(pos + 1, pos + n + 1);
sort(plr + 1, plr + n + 1,
[](const Pillar &p1, const Pillar &p2) {
return p1.ps + p1.ri < p2.ps + p2.ri;
});
build(1, 0, n);
for (int i = 1; i <= n; ++i) {
int psl;
for (int le = 1, ri = n; le <= ri; ) {
int md = (le + ri) >> 1;
if (pos[md] >= plr[i].ps - plr[i].le)
psl = md, ri = md - 1;
else
le = md + 1;
}
int psr;
for (int le = 1, ri = n; le <= ri; ) {
int md = (le + ri) >> 1;
if (pos[md] <= plr[i].ps + plr[i].ri)
psr = md, le = md + 1;
else
ri = md - 1;
}
long long cs = query(1, 0, n, psl - 1, n);
update(1, 0, n, psr, cs + plr[i].cs);
}
printf("%lld\n", query(1, 0, n, n, n));
return 0;
}