// BAI 4
#include "bits/stdc++.h"
#define boostcode ios_base:: sync_with_stdio(0); cin.tie(0);
#define openf freopen("input.inp", "r", stdin); freopen("output.out", "w", stdout);
using namespace std;
typedef long long ll;
ll n, W;
int inp[4005][5];
vector<vector<ll>> a[4005];
vector<ll> cost[4005];
ll f[4005];
ll temp;
ll res;
int main()
{
boostcode;
//openf;
cin >> n >> W;
for (int i = 1; i <= n; i++) {
cin >> inp[i][0] >> inp[i][1] >> inp[i][2] >> inp[i][3];
}
for (int i = 1; i <= n; i++) {
vector<ll> cur;
cur.push_back(inp[i][1]+inp[i][2]-inp[i][3]);
cur.push_back(inp[i][1]);
cur.push_back(inp[i][3]);
cur.push_back(1);
a[inp[i][0]].push_back(cur);
}
// CHECK HERE!:
for (int i = 1; i <= W; i++) {
//cout << "i: " << i << '\n';
priority_queue<vector<ll>, vector<vector<ll>>> pqueue;
for (auto x:a[i]) pqueue.push(x);
while (pqueue.size() && cost[i].size() <= W/i) {
vector<ll> cur = pqueue.top();
//cout << cur[0] << ' ' << cur[1] << ' ' << cur[2] << ' ' << cur[3] << '\n';
pqueue.pop();
cost[i].push_back(cur[0]);
vector<ll> out;
out.push_back(cur[1]+cur[2]*(cur[3]*cur[3]-(cur[3]+1)*(cur[3]+1)));
out.push_back(cur[1]);
out.push_back(cur[2]);
out.push_back(cur[3]+1);
pqueue.push(out);
}
}
for (int i = 1; i <= W; i++) {
for (ll x:cost[i]) {
for (int j = W; j >= i; j--) {
f[j] = max(f[j], f[j-i] + x);
}
}
}
res = (*max_element(f+1, f+W+1));
cout << res;
return 0;
}
Ly8gQkFJIDQKCiNpbmNsdWRlICJiaXRzL3N0ZGMrKy5oIgojZGVmaW5lIGJvb3N0Y29kZSBpb3NfYmFzZTo6IHN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsKI2RlZmluZSBvcGVuZiBmcmVvcGVuKCJpbnB1dC5pbnAiLCAiciIsIHN0ZGluKTsgZnJlb3Blbigib3V0cHV0Lm91dCIsICJ3Iiwgc3Rkb3V0KTsKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKCmxsIG4sIFc7CmludCBpbnBbNDAwNV1bNV07CnZlY3Rvcjx2ZWN0b3I8bGw+PiBhWzQwMDVdOwp2ZWN0b3I8bGw+IGNvc3RbNDAwNV07CmxsIGZbNDAwNV07CmxsIHRlbXA7CmxsIHJlczsKCmludCBtYWluKCkKewogICAgYm9vc3Rjb2RlOwogICAgLy9vcGVuZjsKCiAgICBjaW4gPj4gbiA+PiBXOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgY2luID4+IGlucFtpXVswXSA+PiBpbnBbaV1bMV0gPj4gaW5wW2ldWzJdID4+IGlucFtpXVszXTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIHZlY3RvcjxsbD4gY3VyOwogICAgICAgIGN1ci5wdXNoX2JhY2soaW5wW2ldWzFdK2lucFtpXVsyXS1pbnBbaV1bM10pOwogICAgICAgIGN1ci5wdXNoX2JhY2soaW5wW2ldWzFdKTsKICAgICAgICBjdXIucHVzaF9iYWNrKGlucFtpXVszXSk7CiAgICAgICAgY3VyLnB1c2hfYmFjaygxKTsKICAgICAgICBhW2lucFtpXVswXV0ucHVzaF9iYWNrKGN1cik7CiAgICB9CiAgICAvLyBDSEVDSyBIRVJFIToKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IFc7IGkrKykgewogICAgICAgIC8vY291dCA8PCAiaTogIiA8PCBpIDw8ICdcbic7CiAgICAgICAgcHJpb3JpdHlfcXVldWU8dmVjdG9yPGxsPiwgdmVjdG9yPHZlY3RvcjxsbD4+PiBwcXVldWU7CiAgICAgICAgZm9yIChhdXRvIHg6YVtpXSkgcHF1ZXVlLnB1c2goeCk7CiAgICAgICAgd2hpbGUgKHBxdWV1ZS5zaXplKCkgJiYgY29zdFtpXS5zaXplKCkgPD0gVy9pKSB7CiAgICAgICAgICAgIHZlY3RvcjxsbD4gY3VyID0gcHF1ZXVlLnRvcCgpOwogICAgICAgICAgICAvL2NvdXQgPDwgY3VyWzBdIDw8ICcgJyA8PCBjdXJbMV0gPDwgJyAnIDw8IGN1clsyXSA8PCAnICcgPDwgY3VyWzNdIDw8ICdcbic7CiAgICAgICAgICAgIHBxdWV1ZS5wb3AoKTsKICAgICAgICAgICAgY29zdFtpXS5wdXNoX2JhY2soY3VyWzBdKTsKICAgICAgICAgICAgdmVjdG9yPGxsPiBvdXQ7CiAgICAgICAgICAgIG91dC5wdXNoX2JhY2soY3VyWzFdK2N1clsyXSooY3VyWzNdKmN1clszXS0oY3VyWzNdKzEpKihjdXJbM10rMSkpKTsKICAgICAgICAgICAgb3V0LnB1c2hfYmFjayhjdXJbMV0pOwogICAgICAgICAgICBvdXQucHVzaF9iYWNrKGN1clsyXSk7CiAgICAgICAgICAgIG91dC5wdXNoX2JhY2soY3VyWzNdKzEpOwogICAgICAgICAgICBwcXVldWUucHVzaChvdXQpOwogICAgICAgIH0KICAgIH0KICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IFc7IGkrKykgewogICAgICAgIGZvciAobGwgeDpjb3N0W2ldKSB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSBXOyBqID49IGk7IGotLSkgewogICAgICAgICAgICAgICAgZltqXSA9IG1heChmW2pdLCBmW2otaV0gKyB4KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXMgPSAoKm1heF9lbGVtZW50KGYrMSwgZitXKzEpKTsKICAgIGNvdXQgPDwgcmVzOwoKICAgIHJldHVybiAwOwp9Cg==