#include<stdio.h>
#include<utility>
#include<algorithm>
#include<vector>
#define dv 100010
using namespace std;
struct nod{int a,b;long long U,D;nod *f1,*f2;};
nod *root;
vector< pair< int,long long > > pd[dv];
int n,i,A,B;
long long INF=1,C,get_min(nod *q),best[dv];
void readd(),solve(),build_arb(nod *nod,int aa,int bb),upd(nod *q);
int main()
{
readd();
solve();
return 0;
}
void readd()
{
int x[dv],s[dv],d[dv],yes,no,maybe;
long long c[dv];
pair<int,long long> per;
vector< pair< int,long long > >::iterator it;
freopen("stalpi.in","r",stdin);
freopen("stalpi.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%lld%d%d",&x[i],&c[i],&s[i],&d[i]);
s[i]=x[i]-s[i];d[i]=x[i]+d[i];INF+=c[i];
}
sort(x+1,x+n+1);
for(i=1;i<=n;i++)
{
if(s[i]<=x[1])yes=1;
else
{
no=1;yes=n;
while(yes-no>1)
{
maybe=(yes+no)/2;
if(s[i]>x[maybe])no=maybe;
else yes=maybe;
}
}
s[i]=yes;
if(d[i]>=x[n])yes=n;
else
{
no=n;yes=1;
while(no-yes>1)
{
maybe=(yes+no)/2;
if(d[i]>=x[maybe])yes=maybe;
else no=maybe;
}
}
per.first=s[i];
per.second=c[i];
pd[yes].push_back(per);
}
/*debug
for(i=1;i<=n;i++)
{
printf("Becuri care acopera pozitii pana la %d:\n",i);
for(it=pd[i].begin();it!=pd[i].end();it++)
{
printf(" incepand din pozitia %d\n",(*it).first);
printf(" cu costul %lld\n",(*it).second);
}
}*/
}
void solve()
{
vector< pair< int,long long > >::iterator it;
int j;
//nod *q;
//root=new nod;
//build_arb(root,0,n);
//for(q=root;q->f1;q=q->f1)q->D=0;
//q->U=q->D=0;
for(i=1;i<=n;i++)
{
best[i]=INF;
for(it=pd[i].begin();it!=pd[i].end();it++)
{
A=(*it).first-1;B=i;
C=INF;
for(j=A;j<B;j++)if(best[j]<C)C=best[j];
C+=(*it).second;
if(C<best[i])best[i]=C;
}
}
printf("%lld\n",best[n]);
}
/*
void build_arb(nod *q,int aa,int bb)
{
int mm;nod *p;
q->a=aa;q->b=bb;
q->U=INF=q->D=INF;
if(aa==bb){q->f1=q->f2=0;return;}
mm=(aa+bb)/2;
p=new nod;build_arb(p,aa,mm);q->f1=p;
p=new nod;build_arb(p,mm+1,bb);q->f2=p;
}
long long get_min(nod *q)
{
long long m1,m2;
if(q->a>B)return INF;
if(A>q->b)return INF;
if(A<=q->a&&q->b<=B)return q->D;
m1=get_min(q->f1);
m2=get_min(q->f2);
return m1<m2?m1:m2;
}
void upd(nod *q)
{
if(q->a>i)return;
if(q->b>i){upd(q->f1);upd(q->f2);return;}
if(C>=q->U)return;
if(C<=q->D){q->U=q->D=C;return;}
upd(q->f1);upd(q->f2);
}*/