#include <fstream>
#include <algorithm>
using namespace std;
#define MAXN 100010
#define MAXX 262144
#define INF 1000000000
int N, L;
int ileft, iright;
int value;
int X[MAXN], S[MAXN], D[MAXN], Cost[MAXN];
int Q[MAXN], P[MAXN];
int C[MAXN], best[MAXX];
inline int min(int a, int b)
{
if (a < b) return a;
return b;
}
int cmp(int i, int j)
{
return X[i] + D[i] < X[j] + D[j];
}
int cmp2(int i, int j)
{
return X[i] < X[j];
}
inline int search(int x)
{
int front = 1, middle, back = N, rez = 0;
while (front <= back)
{
middle = (front + back) / 2;
if (X[Q[middle]] < x)
{
rez = middle;
front = middle + 1;
}
else back = middle - 1;
}
return rez;
}
inline int search2(int x)
{
int front = 1, middle, back = N, rez = 0;
while (front <= back)
{
middle = (front + back) / 2;
if (X[P[middle]] + D[P[middle]] >= x)
{
rez = middle;
back = middle - 1;
}
else front = middle + 1;
}
return rez;
}
inline int query(int p, int r, int nod)
{
if (ileft <= p && r <= iright) return best[nod];
else {
int q = (p+r) / 2;
int rez = INF;
if (ileft <= q) rez = query(p, q, nod*2);
if (q < iright) rez = min(rez, query(q+1, r, nod*2+1));
return rez;
}
}
inline void update(int p, int r, int nod)
{
if (p == r) best[nod] = value;
else {
int q = (p+r) / 2;
if (ileft <= q) update(p, q, nod*2);
if (q < iright) update(q+1, r, nod*2+1);
best[nod] = min(best[nod*2], best[nod*2+1]);
}
}
int main()
{
ifstream fin("stalpi.in");
ofstream fout("stalpi.out");
// freopen("stalpi.in", "r", stdin);
// freopen("stalpi.out", "w", stdout);
int i;
fin >> N;
// scanf("%d ", &N);
for (i = 1; i <= N; i++)
{
fin >> X[i] >> Cost[i] >> S[i] >> D[i];
// scanf("%d %d %d %d ", &X[i], &Cost[i], &S[i], &D[i]);
P[i] = Q[i] = i;
}
for (L = 1; L < N; L <<= 1);
for (i = 1; i < 2*L; i++) best[i] = INF;
sort(P+1, P+N+1, cmp);
sort(Q+1, Q+N+1, cmp2);
for (i = 1; i <= N; i++)
{
ileft = search(X[P[i]] - S[P[i]]);
if (ileft == 0) C[i] = Cost[P[i]];
else {
ileft = search2(X[Q[ileft]]);
iright = i-1;
if (ileft > iright) C[i] = INF;
else C[i] = query(1, L, 1) + Cost[P[i]];
}
ileft = iright = i;
value = C[i];
update(1, L, 1);
}
ileft = search2(X[Q[N]]);
iright = N;
// printf("%d\n", query(1, L, 1));
fout << query(1, L, 1) << endl;
return 0;
}