#include <bits/stdc++.h>
using namespace std;
using ll = long long;
struct Friend {
int p, c, x;
};
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
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 theo x tăng dần để luôn ưu tiên dùng cones ở bạn có x nhỏ trước
sort(f.begin(), f.end(), [&](auto &a, auto &b){
return a.x < b.x;
});
const int INF_NEG = -1e9;
// money_dp[j] = max popularity khi đã dùng hết cones, còn j mooney
// cone_dp[k] = max popularity khi còn B mooney, còn k cones
vector<int> money_dp(A+1, INF_NEG), cone_dp(B+1, INF_NEG);
// khởi đầu: chưa mời ai, còn A mooney + B cones
money_dp[A] = 0;
cone_dp[B] = 0;
for(int i = 0; i < N; i++){
int Ci = f[i].c, Xi = f[i].x, Pi = f[i].p;
// mảng mới cho bước i+1
vector<int> money2(A+1, INF_NEG), cone2(B+1, INF_NEG);
// 1) chuyển không mời bạn i
for(int j = 0; j <= A; j++){
money2[j] = max(money2[j], money_dp[j]);
}
for(int k = 0; k <= B; k++){
cone2[k] = max(cone2[k], cone_dp[k]);
}
// 2) mời bạn i từ trạng thái đã dùng hết cones
// => ta chỉ còn j mooney, dùng thêm Ci mooney
for(int j = 0; j <= A; j++){
if(money_dp[j] < 0) continue;
if(j >= Ci){
money2[j - Ci] = max(money2[j - Ci], money_dp[j] + Pi);
}
}
// 3) mời bạn i từ trạng thái còn B mooney (đang xài cones trước)
for(int k = 0; k <= B; k++){
int val = cone_dp[k];
if(val < 0) continue;
// dùng cones tối đa để giảm mooney
int use_cones = min(k, Ci * Xi);
int discount = use_cones / Xi;
int pay = Ci - discount;
if (A >= pay) {
// sau khi mời, cones về 0, mooney còn A-pay
cone2[k - use_cones] = max(cone2[k - use_cones], val + Pi);
// nhưng vì sau dùng cones là k-use_cones luôn = 0 hoặc >0
// và chúng ta chỉ cần nhớ trường hợp còn cones => cập nhật cone2[]
}
// thực ra mọi lần gọi từ cone_dp[] sau khi invite đều chuyển về cone2[]
}
swap(money_dp, money2);
swap(cone_dp, cone2);
}
// đáp án là max trên cả hai mảng còn lại
int ans = 0;
for(int j = 0; j <= A; j++) ans = max(ans, money_dp[j]);
for(int k = 0; k <= B; k++) ans = max(ans, cone_dp[k]);
cout << ans << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwoKc3RydWN0IEZyaWVuZCB7CiAgICBpbnQgcCwgYywgeDsKfTsKCmludCBtYWluKCl7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIGludCBOLCBBLCBCOwogICAgY2luID4+IE4gPj4gQSA+PiBCOwogICAgdmVjdG9yPEZyaWVuZD4gZihOKTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBOOyBpKyspewogICAgICAgIGNpbiA+PiBmW2ldLnAgPj4gZltpXS5jID4+IGZbaV0ueDsKICAgIH0KICAgIC8vIHNvcnQgdGhlbyB4IHTEg25nIGThuqduIMSR4buDIGx1w7RuIMawdSB0acOqbiBkw7luZyBjb25lcyDhu58gYuG6oW4gY8OzIHggbmjhu48gdHLGsOG7m2MKICAgIHNvcnQoZi5iZWdpbigpLCBmLmVuZCgpLCBbJl0oYXV0byAmYSwgYXV0byAmYil7CiAgICAgICAgcmV0dXJuIGEueCA8IGIueDsKICAgIH0pOwoKICAgIGNvbnN0IGludCBJTkZfTkVHID0gLTFlOTsKICAgIC8vIG1vbmV5X2RwW2pdID0gbWF4IHBvcHVsYXJpdHkga2hpIMSRw6MgZMO5bmcgaOG6v3QgY29uZXMsIGPDsm4gaiBtb29uZXkKICAgIC8vIGNvbmVfZHBba10gID0gbWF4IHBvcHVsYXJpdHkga2hpIGPDsm4gQiBtb29uZXksIGPDsm4gayBjb25lcwogICAgdmVjdG9yPGludD4gbW9uZXlfZHAoQSsxLCBJTkZfTkVHKSwgY29uZV9kcChCKzEsIElORl9ORUcpOwogICAgLy8ga2jhu59pIMSR4bqndTogY2jGsGEgbeG7nWkgYWksIGPDsm4gQSBtb29uZXkgKyBCIGNvbmVzCiAgICBtb25leV9kcFtBXSA9IDA7CiAgICBjb25lX2RwW0JdICA9IDA7CgogICAgZm9yKGludCBpID0gMDsgaSA8IE47IGkrKyl7CiAgICAgICAgaW50IENpID0gZltpXS5jLCBYaSA9IGZbaV0ueCwgUGkgPSBmW2ldLnA7CiAgICAgICAgLy8gbeG6o25nIG3hu5tpIGNobyBixrDhu5tjIGkrMQogICAgICAgIHZlY3RvcjxpbnQ+IG1vbmV5MihBKzEsIElORl9ORUcpLCBjb25lMihCKzEsIElORl9ORUcpOwoKICAgICAgICAvLyAxKSBjaHV54buDbiBraMO0bmcgbeG7nWkgYuG6oW4gaQogICAgICAgIGZvcihpbnQgaiA9IDA7IGogPD0gQTsgaisrKXsKICAgICAgICAgICAgbW9uZXkyW2pdID0gbWF4KG1vbmV5MltqXSwgbW9uZXlfZHBbal0pOwogICAgICAgIH0KICAgICAgICBmb3IoaW50IGsgPSAwOyBrIDw9IEI7IGsrKyl7CiAgICAgICAgICAgIGNvbmUyW2tdID0gbWF4KGNvbmUyW2tdLCBjb25lX2RwW2tdKTsKICAgICAgICB9CgogICAgICAgIC8vIDIpIG3hu51pIGLhuqFuIGkgdOG7qyB0cuG6oW5nIHRow6FpIMSRw6MgZMO5bmcgaOG6v3QgY29uZXMKICAgICAgICAvLyAgICA9PiB0YSBjaOG7iSBjw7JuIGogbW9vbmV5LCBkw7luZyB0aMOqbSBDaSBtb29uZXkKICAgICAgICBmb3IoaW50IGogPSAwOyBqIDw9IEE7IGorKyl7CiAgICAgICAgICAgIGlmKG1vbmV5X2RwW2pdIDwgMCkgY29udGludWU7CiAgICAgICAgICAgIGlmKGogPj0gQ2kpewogICAgICAgICAgICAgICAgbW9uZXkyW2ogLSBDaV0gPSBtYXgobW9uZXkyW2ogLSBDaV0sIG1vbmV5X2RwW2pdICsgUGkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyAzKSBt4budaSBi4bqhbiBpIHThu6sgdHLhuqFuZyB0aMOhaSBjw7JuIEIgbW9vbmV5ICjEkWFuZyB4w6BpIGNvbmVzIHRyxrDhu5tjKQogICAgICAgIGZvcihpbnQgayA9IDA7IGsgPD0gQjsgaysrKXsKICAgICAgICAgICAgaW50IHZhbCA9IGNvbmVfZHBba107CiAgICAgICAgICAgIGlmKHZhbCA8IDApIGNvbnRpbnVlOwogICAgICAgICAgICAvLyBkw7luZyBjb25lcyB04buRaSDEkWEgxJHhu4MgZ2nhuqNtIG1vb25leQogICAgICAgICAgICBpbnQgdXNlX2NvbmVzID0gbWluKGssIENpICogWGkpOwogICAgICAgICAgICBpbnQgZGlzY291bnQgPSB1c2VfY29uZXMgLyBYaTsKICAgICAgICAgICAgaW50IHBheSA9IENpIC0gZGlzY291bnQ7CiAgICAgICAgICAgIGlmIChBID49IHBheSkgewogICAgICAgICAgICAgICAgLy8gc2F1IGtoaSBt4budaSwgY29uZXMgduG7gSAwLCBtb29uZXkgY8OybiBBLXBheQogICAgICAgICAgICAgICAgY29uZTJbayAtIHVzZV9jb25lc10gPSBtYXgoY29uZTJbayAtIHVzZV9jb25lc10sIHZhbCArIFBpKTsKICAgICAgICAgICAgICAgIC8vIG5oxrBuZyB2w6wgc2F1IGTDuW5nIGNvbmVzIGzDoCBrLXVzZV9jb25lcyBsdcO0biA9IDAgaG/hurdjID4wCiAgICAgICAgICAgICAgICAvLyB2w6AgY2jDum5nIHRhIGNo4buJIGPhuqduIG5o4bubIHRyxrDhu51uZyBo4bujcCBjw7JuIGNvbmVzID0+IGPhuq1wIG5o4bqtdCBjb25lMltdCiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gdGjhu7FjIHJhIG3hu41pIGzhuqduIGfhu41pIHThu6sgY29uZV9kcFtdIHNhdSBraGkgaW52aXRlIMSR4buBdSBjaHV54buDbiB24buBIGNvbmUyW10KICAgICAgICB9CgogICAgICAgIHN3YXAobW9uZXlfZHAsIG1vbmV5Mik7CiAgICAgICAgc3dhcChjb25lX2RwLCBjb25lMik7CiAgICB9CgogICAgLy8gxJHDoXAgw6FuIGzDoCBtYXggdHLDqm4gY+G6oyBoYWkgbeG6o25nIGPDsm4gbOG6oWkKICAgIGludCBhbnMgPSAwOwogICAgZm9yKGludCBqID0gMDsgaiA8PSBBOyBqKyspIGFucyA9IG1heChhbnMsIG1vbmV5X2RwW2pdKTsKICAgIGZvcihpbnQgayA9IDA7IGsgPD0gQjsgaysrKSBhbnMgPSBtYXgoYW5zLCBjb25lX2RwW2tdKTsKICAgIGNvdXQgPDwgYW5zIDw8ICJcbiI7CiAgICByZXR1cm4gMDsKfQo=