ac44,wa17,感觉对的一比,但是不知道为什么wa了,求调,或者hack数据
/*
卫风·芄兰
芄兰之支,童子佩觿.
虽则佩觿,能不我知?
容兮遂兮,垂带悸兮.
芄兰之叶,童子佩韘.
虽则佩韘,能不我甲?
容兮遂兮,垂带悸兮.
*/
#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
#define tul array<__int128,3>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define rep_(i,a,b) for(int i=a;i>=b;--i)
#define all(x) x.begin(),x.end()
#define bp(x) __builtin_popcountll(x)
#define ctz(x) __builtin_ctzll(x)
#define cy cout<<"Yes"<<endl
#define cn cout<<"No"<<endl
#define lc (rt<<1)
#define rc (rt<<1|1)
mt19937_64 rnd(time(0));
const int N=5e5+5,yyx=998244353;
vector<int> to[N];
int n,x,d;
int dp[N];
inline int mod(int x){
return (x%yyx+yyx)%yyx;
}
inline int cmin(int &x,int y){
return x>y?x=y,1:0;
}
inline int cmax(int &x,int y){
return x<y?x=y,1:0;
}
struct node{
int p,u;
bool operator< (node w){
if(p==w.p) return u>w.u;
return p<w.p;
}
};
vector<node> e[N];
inline void solve(){
cin>>n>>x>>d;
rep(i,1,n){
int p,u,c;cin>>p>>u>>c;
e[c].push_back({p,u});
}
rep(i,1,n) sort(all(e[i]));
int ans=0;
rep(i,1,n){
int s=e[i].size();
vector<int> ma(s+1,-2e14),pp(s+1,0);
vector<vector<int>> f(s+1,vector<int>(x+1,0));
rep(k,1,s){
auto [p,u]=e[i][k-1];
rep(j,0,x){
f[k][j]=f[k-1][j];
if(j>=p) cmax(f[k][j],f[k-1][j-p]+u);
}
}
rep(k,1,s) rep(j,0,x){
if(cmax(ma[k],f[k][j])) pp[k]=j;
}
rep_(j,x,0){
rep(k,1,s){
//cout<<pp[k]<<" "<<ma[k]<<" "<<k<<endl;
if(j>=pp[k]) cmax(dp[j],dp[j-pp[k]]+ma[k]+d);
}
cmax(ans,dp[j]);
}
}
cout<<ans<<endl;
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
//freopen("D://321//in.txt","r",stdin);
//freopen("D://321//out.txt","w",stdout);
int _=1;
//cin>>_;
while(_--)
solve();
return 0;
}