#include<bits/stdc++.h>
using namespace std;
int n,ti,f[40005],tot[40005],num;
struct s{
int x,y,t,v;
double k;
}arr[20005];
bool cmp(s s1,s s2){
if(s1.k==s2.k) return s1.x<s2.x;
return s1.k<s2.k;
}
int main(){
cin>>n>>ti;
for(int i=1;i<=n;i++){
cin>>arr[i].x>>arr[i].y>>arr[i].t>>arr[i].v;
arr[i].k=(double)(arr[i].y)/(double)(arr[i].x);
}
sort(arr+1,arr+n+1,cmp);
for(int i=1;i<=n;i++){
if(arr[i].k!=arr[i-1].k) tot[++num]=i;
}
for(int i=1;i<=n;i++){
for(int j=ti;j>=arr[i].t;j--){
int id,sum=0;
for(int k=1;k<=num;k++){
if((tot[k]<i&&tot[k+1]>i)||tot[k]==i){
id=tot[k];
break;
}
}
for(int k=id;k<=i;k++){
sum+=arr[k].t;
if(j-sum>=0){
f[j]=max(f[j],f[j-sum]+arr[k].v);
}
}
}
}
cout<<f[ti];
return 0;
}