#include <bits/stdc++.h>
using namespace std;
inline int getint() {
  int x = 0, p = 1;
  char c = getchar();
  while (!isdigit(c)) {
    if (c == '-') p = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 3) + (x << 1) + (c ^ '0');
    c = getchar();
  }
  return x * p;
}
int n;
struct item {
  int t, d, p, pos;
  bool operator<(const item &b) const { return d < b.d; }
} xx[2000000];
int dp[106][2005], pre[106][2005];
int ansitem[5000];
int main() {
  n = getint();
  for (int i = 1; i <= n; ++i) {
    xx[i].t = getint(), xx[i].d = getint() - 1, xx[i].p = getint(),
    xx[i].pos = i;
  }
  sort(xx + 1, xx + n + 1);
  for (int i = 1; i <= n; ++i) {
    for (int j = xx[i].d; j >= 0; --j) {
      dp[i][j] = dp[i - 1][j];
      pre[i][j] = pre[i - 1][j];
      if (j >= xx[i].t && dp[i][j] < dp[i - 1][j - xx[i].t] + xx[i].p) {
        dp[i][j] = dp[i - 1][j - xx[i].t] + xx[i].p;
        pre[i][j] = i;
      }
    }
  }
  int ans = 0, ansi = 0, ansj = 0;
  for (int i = 1; i <= n; ++i) {
    for (int j = xx[i].d; j >= 0; --j) {
      if (dp[i][j] > ans) {
        ans = dp[i][j];
        ansi = i;
        ansj = j;
      }
    }
  }
  cout << ans << endl;
  if (ans == 0) {
    cout << 0 << endl;
    return 0;
  }
  int tot = 0;
  while (pre[ansi][ansj]) {
    int x;
    x = ansitem[++tot] = pre[ansi][ansj];
    ansj -= xx[pre[ansi][ansj]].t;
    ansi = x - 1;
  }
  cout << tot << endl;
  for (int i = tot; i >= 1; --i) {
    cout << xx[ansitem[i]].pos << " ";
  }
  return 0;
}
