#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define f first
#define s second
ifstream fin ("stalpi.in");
ofstream fout ("stalpi.out");
int n;
struct stalp {
int x, cost, st, dr;
} v[100002];
pair<pair<int, int>, int>a[100002];
bool cmp (stalp a, stalp b) {
return a.x < b.x;
}
const ll inf = 1e11;
ll aint[400002];
void build (int nod, int l, int r) {
if (l == r) {
aint[nod] = inf;
return;
}
aint[nod] = inf;
int mid = (l + r) / 2;
build(2 * nod, l, mid);
build(2 * nod + 1, mid + 1, r);
}
void update (int nod, int l, int r, int poz, ll val) {
if (l == r) {
aint[nod] = min(aint[nod], val);
return;
}
int mid = (l + r) / 2;
if (poz <= mid)
update(2 * nod, l, mid, poz, val);
else
update(2 * nod + 1, mid + 1, r, poz, val);
aint[nod] = min(aint[2 * nod], aint[2 * nod + 1]);
}
ll ans;
void query (int nod, int l, int r, int a, int b) {
if (a <= l && r <= b) {
ans = min(ans, aint[nod]);
return;
}
int mid = (l + r) / 2;
if (a <= mid)
query(2 * nod, l, mid, a, b);
else
query(2 * nod + 1, mid + 1, r, a, b);
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
fin >> n;
for (int i = 1; i <= n;i++) {
fin >> v[i].x >> v[i].cost >> v[i].st >> v[i].dr;
}
sort(v + 1, v + n + 1, cmp);
for (int i = 1; i <= n; i++) {
int val = v[i].x - v[i].st;
int st = 1, dr = i, poz = i;
while (st <= dr) {
int mij = (st + dr) / 2;
if (v[mij].x >= val) {
poz = mij;
dr = mij - 1;
}
else
st = mij + 1;
}
a[i].f.f = poz;
val = v[i].x + v[i].dr;
st = i; dr = n; poz = i;
while (st <= dr) {
int mij = (st + dr) / 2;
if (v[mij].x <= val) {
poz = mij;
st = mij + 1;
}
else
dr = mij - 1;
}
a[i].f.s = poz;
a[i].s = v[i].cost;
}
sort(a + 1, a + n + 1);
build(1, 1, n);
for (int i = 1; i <= n; i++) {
int val;
if (a[i].f.f == 1)
val = 0;
else {
ans = inf;
query(1, 1, n, a[i].f.f - 1, a[i].f.s);
val = ans;
}
update(1, 1, n, a[i].f.s, val + a[i].s);
}
ans = inf;
query(1, 1, n, n, n);
fout << ans;
return 0;
}