#include <bits/stdc++.h>
using namespace std;
const double Eps = 1e-8;
const int Inf = 0x3F3F3F3F;
const int Mod = 1000000007;
const int maxn = 100 + 10;
const int maxd = 2e3 + 10;
int N, dp[maxn][maxd];
struct item {
  int t, d, p, o;
  bool operator<(const item &x) const { return d < x.d; }
};
item a[maxn];
vector<int> anss;
void f(int i, int d) {
  if (dp[i][d] == 0) {
    return;
  } else {
    if (dp[i][d] == dp[i - 1][d]) {
      f(i - 1, d);
    } else {
      anss.push_back(a[i].o);
      f(i - 1, d - a[i].t);
    }
  }
}
int main(int argc, char *argv[]) {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout << setprecision(numeric_limits<double>::max_digits10 + 1);
  ;
  cin >> N;
  for (int i = 1; i <= N; ++i) {
    int t, d, p;
    cin >> t >> d >> p;
    a[i] = (item){t, d, p, i};
  }
  sort(a + 1, a + N + 1);
  for (int i = 1; i <= N; ++i) {
    for (int d = 0; d < maxd; ++d) {
      dp[i][d] = dp[i - 1][d];
      int di = d - a[i].t;
      if (a[i].d > d && di >= 0)
        dp[i][d] = max(dp[i][d], dp[i - 1][di] + a[i].p);
    }
  }
  int ans, ii, dd;
  ans = ii = dd = 0;
  for (int i = 1; i <= N; ++i) {
    for (int d = 0; d < maxd; ++d) {
      if (dp[i][d] > ans) {
        ii = i, dd = d;
        ans = max(ans, dp[i][d]);
      }
    }
  }
  cout << ans << '\n';
  ;
  f(ii, dd);
  cout << anss.size() << '\n';
  ;
  for (int i = anss.size() - 1; i >= 0; --i) cout << anss[i] << " \n"[i == 0];
  return 0;
}
