#1#2#3#4#5WA
#include<bits/stdc++.h>
using namespace std;
const int N=2010;
const int inf=(1<<31)-1;
int t,maxp,w;
int dp[N][N],dpa[N],dpb[N],cnta,cntb;
struct node
{
int num[N],id[N],cnt,nid,s,k;
}a;
void start(node& a,int k)
{
a.cnt=-1; a.nid=0; a.s=0; a.k=k;
}
void push(node& a,int b)
{
while(a.cnt>=a.s&&a.num[a.cnt]<b)
--a.cnt;
a.num[++a.cnt]=b;
a.id[a.cnt]=++a.nid;
if(a.nid-a.id[a.s]>=a.k) ++a.s;
}
int top(node& a)
{
return (a.s<=a.cnt?a.num[a.s]:-inf);
}
int main()
{
cin>>t>>maxp>>w;
memset(dp[0]+1,0x80,sizeof(dp[0]));
int ap,bp,as,bs;
node dpa,dpb;
for(int i=1;i<=t;i++)
{
cin>>ap>>bp>>as>>bs;
start(dpa,as);
for(int j=0;j<=maxp;j++)
{
start(dpb,bs);
dp[i][j]=dp[i-1][j];
if(j>0)
push(dpa,dp[max(0,i-w-1)][j-1]-ap);
dp[i][j]=max(dp[i][j],top(dpa));
for(int k=j+1;k<=min(j+bs,maxp);k++)
{
push(dpb,dp[max(0,i-w-1)][k]+(k-j)*bp);
}
dp[i][j]=max(dp[i][j],top(dpb));
}
}
cout<<dp[t][0];
}