#include <fstream>
#include <algorithm>
#define MAXN 100005
#define INF 2000000000
using namespace std;
ifstream f("stalpi.in");
ofstream g("stalpi.out");
struct interval{
int l,r,cost;};
int n,v[MAXN],ai[4*MAXN],a,b,mnq,mn;
interval intervale[MAXN];
bool Comp(interval a,interval b){
return a.r<b.r;}
int MIN(int a,int b){
return (a<b)?(a):(b);}
void build_ai(int nod,int st,int dr);
void query(int nod,int st,int dr);
void update(int nod,int st,int dr);
int main()
{
int i,j=1;
f>>n;
for(i=1;i<=n;i++){
f>>v[i]>>intervale[i].cost>>intervale[i].l>>intervale[i].r;
intervale[i].l=v[i]-intervale[i].l;
intervale[i].r+=v[i];}
sort(v+1,v+n+1);
for(i=1;i<=n;i++){
intervale[i].l=lower_bound(v+1,v+n+1,intervale[i].l)-v;
intervale[i].r=upper_bound(v+1,v+n+1,intervale[i].r)-v-1;}
build_ai(1,1,n);
sort(intervale+1,intervale+n+1,Comp);
for(i=1;i<=n;i++){
mn=INF;
while(j<=n&&intervale[j].r==i){
mnq=0;
if(intervale[j].l-1){
a=intervale[j].l-1;
b=intervale[j].r-1;
mnq=INF;
query(1,1,n);}
if(mnq+intervale[j].cost<mn)
mn=mnq+intervale[j].cost;
j++;}
a=i;
update(1,1,n);}
g<<mn<<'\n';
f.close();
g.close();
return 0;
}
void build_ai(int nod,int st,int dr){
ai[nod]=INF;
if(st==dr)
return;
int mij=(st+dr)/2;
build_ai(2*nod,st,mij);
build_ai(2*nod+1,mij+1,dr);}
void query(int nod,int st,int dr){
if(st>=a&&dr<=b){
if(ai[nod]<mnq)
mnq=ai[nod];
return;}
int mij=(st+dr)/2;
if(a<=mij)
query(2*nod,st,mij);
if(b>mij)
query(2*nod+1,mij+1,dr);}
void update(int nod,int st,int dr){
if(st==dr){
ai[nod]=mn;
return;}
int mij=(st+dr)/2;
if(a<=mij)
update(2*nod,st,mij);
else
update(2*nod+1,mij+1,dr);
ai[nod]=MIN(ai[2*nod],ai[2*nod+1]);}