#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> t(2005), d(2005), v(2005);
void initialize() {
  t.resize(n);
  d.resize(n);
  v.resize(n);
  return;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n;
  initialize();
  int max_d = 0;
  vector<pair<int, pair<int, pair<int, int> > > > items;
  for (int i = 0; i < n; i++) {
    cin >> t[i] >> d[i] >> v[i];
    if (d[i] > max_d) {
      max_d = d[i];
    }
    items.push_back(make_pair(d[i], make_pair(t[i], make_pair(v[i], i + 1))));
  }
  sort(items.begin(), items.end());
  int dp[n + 1][max_d + 1];
  vector<vector<vector<int> > > sol(n + 1, vector<vector<int> >(max_d + 1));
  for (int i = 0; i <= n; i++) {
    for (int j = 0; j <= max_d; j++) {
      if (i == 0 || j == 0) {
        dp[i][j] = 0;
      } else {
        dp[i][j] = dp[i - 1][j];
        sol[i][j] = sol[i - 1][j];
        if (dp[i][j - 1] > dp[i][j]) {
          dp[i][j] = dp[i][j - 1];
          sol[i][j] = sol[i][j - 1];
        }
        if (j - items[i - 1].second.first >= 0 && j < items[i - 1].first &&
            items[i - 1].second.second.first +
                    dp[i - 1][j - items[i - 1].second.first] >
                dp[i][j]) {
          dp[i][j] = items[i - 1].second.second.first +
                     dp[i - 1][j - items[i - 1].second.first];
          sol[i][j] = sol[i - 1][j - items[i - 1].second.first];
          sol[i][j].push_back(items[i - 1].second.second.second);
        }
      }
    }
  }
  cout << dp[n][max_d] << endl;
  cout << sol[n][max_d].size() << endl;
  vector<int>::iterator it = sol[n][max_d].begin();
  while (it != sol[n][max_d].end()) {
    cout << *it << " ";
    it++;
  }
  return 0;
}
