#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2010;
int T,maxp,W,f[N][N],ap[N],bp[N],as[N],bs[N],ans=0xc3c3c3c3c3c3c3c3;
signed main(){
cin>>T>>maxp>>W;
memset(f,0xc3,sizeof(f));
for(int i=1;i<=T;i++)cin>>ap[i]>>bp[i]>>as[i]>>bs[i];
f[0][0]=0;
for(int i=1;i<=T;i++){
if(i<=W){
for(int j=0;j<=as[i];j++)f[i][j]=-j*ap[i];
continue;
}
deque<int>qa,qb;
for(int j=0;j<=maxp;j++){
while(!qa.empty()&&j-as[i]>qa.front())qa.pop_front();
while(!qa.empty()&&f[i-W-1][qa.back()]+(qa.back()-j)*ap[i]<=f[i-W-1][j])qa.pop_back();
qa.push_back(j);
f[i][j]=max(f[i][j],f[i-W-1][qa.front()]+(qa.front()-j)*ap[i]);
}
for(int j=maxp;j>=0;j--){
while(!qb.empty()&&j+bs[i]<qb.front())qb.pop_front();
while(!qb.empty()&&f[i-W-1][qb.back()]+(qb.back()-j)*bp[i]<=f[i-W-1][j])qb.pop_back();
qb.push_back(j);
f[i][j]=max(f[i][j],f[i-W-1][qb.front()]+(qb.front()-j)*bp[i]);
}
for(int j=0;j<=maxp;j++)f[i][j]=max(f[i][j],f[i-1][j]);
}
for(int i=1;i<=T;i++)
for(int j=0;j<=maxp;j++)ans=max(ans,f[i][j]);
cout<<ans<<endl;
return 0;
}