#include<stdio.h>
struct nod{long info;nod *next;};
nod *st[101],*p;
long n,i,j,x[101],a[101],b[101],aux1,dr[101],aa,bb,zero,sst;
long long c[101],va[101],vb[101],aux2,i8,cc,c_old,c_new;
void hd(long ic,long nc);
void sh(long i1,long i2);
void cauta1(long val,long ll,long rr);
void pune(long i1,long i2);
void cauta2(long val,long ll,long rr);
void get_dr(long ii);
void make_arb();
long long get_cmin(long ii,long poz);
void update(long ii);
int main()
{
FILE *f,*g;f=fopen("stalpi.in","r");g=fopen("stalpi.out","w");
fscanf(f,"%ld",&n);
for(i=1;i<=n;i++)fscanf(f,"%ld%lld%ld%ld",&x[i],&c[i],&a[i],&b[i]);
for(i=1;i<=n;i++){a[i]=x[i]-a[i];b[i]=x[i]+b[i];}
for(i=n/2;i>=1;i--)hd(i,n);
for(i=n;i>=1;i--){sh(1,i);hd(1,i-1);}
for(i=1;i<=n;i++)
{ if(a[i]<=x[1]) sst=1;
else cauta1(a[i],1,n);
pune(sst,i);
if(b[i]>=x[n]) dr[i]=n;
else cauta2(b[i],1,n);
}
i8=100000;i8*=i8;
make_arb();
for(i=1;i<=n;i++)
{ c_old=get_cmin(i-1,1);aa=i;
for(p=st[i];p;p=p->next)
{ c_new=c_old+c[p->info];
bb=dr[p->info];
update(1);
}
}
fprintf(g,"%lld\n",get_cmin(n,1));
fcloseall();
return 0;
}
void hd(long ic,long nc)
{
long is,is1;is=2*ic;is1=is+1;
if(is>nc)return;
if(is<nc)if(x[is1]>x[is])is=is1;
if(x[is]>x[ic]){sh(is,ic);hd(is,nc);}
}
void sh(long i1,long i2)
{
aux1=x[i1];x[i1]=x[i2];x[i2]=aux1;
aux1=a[i1];a[i1]=a[i2];a[i2]=aux1;
aux1=b[i1];b[i1]=b[i2];b[i2]=aux1;
aux2=c[i1];c[i1]=c[i2];c[i2]=aux2;
}
void cauta1(long val,long ll,long rr)
{ long mm;
if(val>x[rr])return;
if(val<x[ll])return;
if(x[ll]==val){sst=ll;return;}
if(x[rr]==val){sst=rr;return;}
if(rr==ll+1){sst=rr;return;}
mm=(ll+rr)/2;
cauta1(val,ll,mm);
cauta1(val,mm+1,rr);
}
void cauta2(long val,long ll,long rr)
{ long mm;
if(val>x[rr])return;
if(val<x[ll])return;
if(x[ll]==val){dr[i]=ll;return;}
if(x[rr]==val){dr[i]=rr;return;}
if(rr==ll+1){dr[i]=ll;return;}
mm=(ll+rr)/2;
cauta2(val,ll,mm);
cauta2(val,mm+1,rr);
}
void make_arb()
{
long zero,fs,fd;
zero=1;
while(zero<n+1)zero<<=1;
for(i=0;i<zero;i++)
{ a[zero+i]=i;
b[zero+i]=i;
va[zero+i]=i8;
vb[zero+i]=i8;
}
vb[zero]=0;va[zero]=0;
for(i=zero-1;i>=1;i--)
{ fs=i<<1;fd=fs|1;
a[i]=a[fs];b[i]=b[fs];
va[i]=va[fs];vb[i]=vb[fd];
}
}
long long get_cmin(long ii,long poz)
{
if(va[poz]==vb[poz]) return va[poz];
if(ii<=b[poz<<1])return get_cmin(ii,poz<<1);
return get_cmin(ii,(poz<<1)|1);
}
void update(long ii)
{
if(bb<a[ii])return;
if(aa>b[ii])return;
if(bb>=b[ii]&&aa<=a[ii])
{ va[ii]=(va[ii]<c_new)?va[ii]:c_new;
vb[ii]=(vb[ii]<c_new)?vb[ii]:c_new;
if(va[ii]==vb[ii])return;
}
update(ii<<1);
update((ii<<1)|1);
}
void pune(long i1,long i2)
{
p=new nod;
p->info=i2;
p->next=(st[i1])?st[i1]:0;
st[i1]=p;
}