#include<bits/stdc++.h>
using namespace std;
const int N = 210 , M = 4e4+10 ;
typedef long long ll;
int n,m,sum;
ll f[N][M];
struct node{
int x,y,t,v;
double k;
}q[N];
struct edge{
int tot;
int sumt[N];
ll sumv[N];
}t[N];
bool cmp1(node a,node b){
if(a.k!=b.k){
return a.k<b.k;
}
return abs(a.x)<abs(b.x);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>q[i].x>>q[i].y>>q[i].t>>q[i].v;
if(q[i].y!=0){
q[i].k=(double)q[i].x/(double)q[i].y;
}
else{
q[i].k=1919810;
}
}
sort(q+1,q+n+1,cmp1);
double last=-114514;
for(int i=1;i<=n;i++){
if(q[i].k!=last){
last=q[i].k;
t[++sum].tot=1;
t[sum].sumt[1]=q[i].t;
t[sum].sumv[1]=(ll)q[i].v;
}
else{
t[sum].tot++;
t[sum].sumt[t[sum].tot]=t[sum].sumt[t[sum].tot-1]+q[i].t;
t[sum].sumv[t[sum].tot]=t[sum].sumv[t[sum].tot-1]+(ll)q[i].v;
}
}
for(int i=1;i<=sum;i++)
for(int j=1;j<=t[i].tot;j++)
for(int k=m;k>=t[i].sumt[j];k--){
f[i][k]=max(f[i][k],f[i-1][k-t[i].sumt[j]]+t[i].sumv[j]);
}
ll ans=0;
for(int i=1;i<=sum;i++){
ans=max(ans,f[i][m]);
}
cout<<ans;
return 0;
}