DP:
#include<cstdio>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn = 1000 + 5;
struct kk
{
int v, k, c, l;
bool operator < (const kk &p) const{
return v < p.v;
}
}vis[maxn];
int d[maxn];
int s[maxn];
int v[maxn];
int k[maxn];
int c[maxn];
int main()
{
int n;
while(scanf("%d", &n) == 1 &&n)
{
memset(vis,0,sizeof(vis));
memset(d,0,sizeof(d));
memset(s,0,sizeof(s));
memset(v,0,sizeof(v));
memset(k,0,sizeof(k));
memset(c,0,sizeof(c));
for(int i = 1; i <= n; ++i) scanf("%d%d%d%d", &vis[i].v, &vis[i].k, &vis[i].c, &vis[i].l);
sort(vis+1, vis+n+1);
for(int i = 1; i <= n; ++i)
{
v[i] = vis[i].v;
k[i] = vis[i].k;
c[i] = vis[i].c;
s[i] = s[i-1] + vis[i].l;
}
for(int i = 1; i <= n; ++i) d[i] = (1<<30);
for(int i = 1; i <= n; ++i)
for(int j = 0; j <= i; ++j)
d[i] = min(d[j]+(s[i] - s[j]) * c[i] + k[i], d[i]);
printf("%d\n", d[n]);
}
}