#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
	int n,c;
	while(cin >> n >> c){
		vector<int> cost(n);
		vector<vector<int> > v(3, vector<int>(n));
		for(int i=0; i<n; i++){
			string s;
			getline(cin, s);
			getline(cin, s);
			cin >> cost[i] >> v[0][i] >> v[1][i] >> v[2][i];
		}
		
		int ans = 0;
		for(int d=0; d<3; d++){
			vector<int> dp(c+1, 0);
			for(int i=0; i<n; i++){
				for(int j=0; j<c; j++){
					if(j +cost[i] <= c){
						dp[j+cost[i]] = max(dp[j+cost[i]], dp[j]+v[d][i]);
					}
				}
			}
			ans = max(ans, *max_element(dp.begin(), dp.end()));
		}
		cout << ans << endl;
	}
	return 0;
}
