#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define all(c)      (c).begin(), (c).end()
#define sz(c)       (int)(c).size()
#define vt          vector
#define pb          push_back
#define F           first
#define S           second
void solve() {
  int s,n; cin>>s>>n;
  vt<vt<ll>> item(s+1);
  for (int i=0;i<n;i++){
    int v,w,k; cin>>v>>w>>k;
    k = min(k, s);
    for (int j=0;j<k;j++) item[w].pb(v);
  }
  vt<ll> dp(s+1, 0);
  for (int w=1;w<=s;w++){
    sort(all(item[w]), greater<>());
    vt<ll> values;
    int cn = min(sz(item[w]), (s+w-1)/w);
    for (int i=0;i<cn;i++) values.pb(item[w][i]);
    for (int v: values){
        for (int x=s;x>=w;x--){
            dp[x] = max(dp[x], dp[x-w]+v);
        }
    }
  }
  cout << dp[s] << endl;
}
int main() {
  int tt=1; 
  // cin>>tt; 
  while(tt--) solve();
  return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |