#include <bits/stdc++.h>
using namespace std;
struct Friend {
int p, c, x;
};
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int N, A, B;
cin >> N >> A >> B;
vector<Friend> f(N);
for (int i = 0; i < N; i++) {
cin >> f[i].p >> f[i].c >> f[i].x;
}
// Sort by X ascending to apply cones greedily
sort(f.begin(), f.end(), [](const Friend &a, const Friend &b) {
return a.x < b.x;
});
// dp layers: 0 = previous i, 1 = current i
const int INF_NEG = -1e9;
vector<vector<int>> dp_prev(A+1, vector<int>(B+1, 0));
vector<vector<int>> dp_cur(A+1, vector<int>(B+1, 0));
dp_prev[A][B] = 0; // start with full A mooney and B cones, 0 popularity
for (int i = 0; i < N; i++) {
// Reset current layer
for (int j = 0; j <= A; j++) {
fill(dp_cur[j].begin(), dp_cur[j].end(), 0);
}
for (int j = 0; j <= A; j++) {
for (int k = 0; k <= B; k++) {
int val = dp_prev[j][k];
if (val < 0) continue;
// 1) Do not invite friend i
dp_cur[j][k] = max(dp_cur[j][k], val);
// 2) Invite friend i
int Ci = f[i].c;
int Xi = f[i].x;
int Pi = f[i].p;
// spend as many cones as possible on this friend
int use_cones = min(k, Ci * Xi);
int discount = use_cones / Xi;
int pay = Ci - discount;
if (j >= pay) {
int nj = j - pay;
int nk = k - use_cones;
dp_cur[nj][nk] = max(dp_cur[nj][nk], val + Pi);
}
}
}
// swap layers
dp_prev.swap(dp_cur);
}
// Answer = max popularity over all remaining budgets
int ans = 0;
for (int j = 0; j <= A; j++) {
for (int k = 0; k <= B; k++) {
ans = max(ans, dp_prev[j][k]);
}
}
cout << ans;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgRnJpZW5kIHsKICAgIGludCBwLCBjLCB4Owp9OwoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwoKICAgIGludCBOLCBBLCBCOwogICAgY2luID4+IE4gPj4gQSA+PiBCOwogICAgdmVjdG9yPEZyaWVuZD4gZihOKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgY2luID4+IGZbaV0ucCA+PiBmW2ldLmMgPj4gZltpXS54OwogICAgfQogICAgLy8gU29ydCBieSBYIGFzY2VuZGluZyB0byBhcHBseSBjb25lcyBncmVlZGlseQogICAgc29ydChmLmJlZ2luKCksIGYuZW5kKCksIFtdKGNvbnN0IEZyaWVuZCAmYSwgY29uc3QgRnJpZW5kICZiKSB7CiAgICAgICAgcmV0dXJuIGEueCA8IGIueDsKICAgIH0pOwoKICAgIC8vIGRwIGxheWVyczogMCA9IHByZXZpb3VzIGksIDEgPSBjdXJyZW50IGkKICAgIGNvbnN0IGludCBJTkZfTkVHID0gLTFlOTsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gZHBfcHJldihBKzEsIHZlY3RvcjxpbnQ+KEIrMSwgMCkpOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBkcF9jdXIoQSsxLCB2ZWN0b3I8aW50PihCKzEsIDApKTsKCiAgICBkcF9wcmV2W0FdW0JdID0gMDsgLy8gc3RhcnQgd2l0aCBmdWxsIEEgbW9vbmV5IGFuZCBCIGNvbmVzLCAwIHBvcHVsYXJpdHkKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgIC8vIFJlc2V0IGN1cnJlbnQgbGF5ZXIKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8PSBBOyBqKyspIHsKICAgICAgICAgICAgZmlsbChkcF9jdXJbal0uYmVnaW4oKSwgZHBfY3VyW2pdLmVuZCgpLCAwKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gQTsgaisrKSB7CiAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDw9IEI7IGsrKykgewogICAgICAgICAgICAgICAgaW50IHZhbCA9IGRwX3ByZXZbal1ba107CiAgICAgICAgICAgICAgICBpZiAodmFsIDwgMCkgY29udGludWU7CiAgICAgICAgICAgICAgICAvLyAxKSBEbyBub3QgaW52aXRlIGZyaWVuZCBpCiAgICAgICAgICAgICAgICBkcF9jdXJbal1ba10gPSBtYXgoZHBfY3VyW2pdW2tdLCB2YWwpOwoKICAgICAgICAgICAgICAgIC8vIDIpIEludml0ZSBmcmllbmQgaQogICAgICAgICAgICAgICAgaW50IENpID0gZltpXS5jOwogICAgICAgICAgICAgICAgaW50IFhpID0gZltpXS54OwogICAgICAgICAgICAgICAgaW50IFBpID0gZltpXS5wOwogICAgICAgICAgICAgICAgLy8gc3BlbmQgYXMgbWFueSBjb25lcyBhcyBwb3NzaWJsZSBvbiB0aGlzIGZyaWVuZAogICAgICAgICAgICAgICAgaW50IHVzZV9jb25lcyA9IG1pbihrLCBDaSAqIFhpKTsKICAgICAgICAgICAgICAgIGludCBkaXNjb3VudCA9IHVzZV9jb25lcyAvIFhpOwogICAgICAgICAgICAgICAgaW50IHBheSA9IENpIC0gZGlzY291bnQ7CiAgICAgICAgICAgICAgICBpZiAoaiA+PSBwYXkpIHsKICAgICAgICAgICAgICAgICAgICBpbnQgbmogPSBqIC0gcGF5OwogICAgICAgICAgICAgICAgICAgIGludCBuayA9IGsgLSB1c2VfY29uZXM7CiAgICAgICAgICAgICAgICAgICAgZHBfY3VyW25qXVtua10gPSBtYXgoZHBfY3VyW25qXVtua10sIHZhbCArIFBpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBzd2FwIGxheWVycwogICAgICAgIGRwX3ByZXYuc3dhcChkcF9jdXIpOwogICAgfQoKICAgIC8vIEFuc3dlciA9IG1heCBwb3B1bGFyaXR5IG92ZXIgYWxsIHJlbWFpbmluZyBidWRnZXRzCiAgICBpbnQgYW5zID0gMDsKICAgIGZvciAoaW50IGogPSAwOyBqIDw9IEE7IGorKykgewogICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDw9IEI7IGsrKykgewogICAgICAgICAgICBhbnMgPSBtYXgoYW5zLCBkcF9wcmV2W2pdW2tdKTsKICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8IGFuczsKICAgIHJldHVybiAwOwp9Cg==