#include <bits/stdc++.h>
using namespace std;
struct dataa {
  int t;
  int b;
  int v;
  int id;
  bool operator<(const dataa &rhs) const { return this->b < rhs.b; }
};
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  dataa d[n];
  for (int i = 0; i < n; i++) {
    cin >> d[i].t >> d[i].b >> d[i].v;
    d[i].id = i;
  }
  sort(d, d + n);
  int dp[n + 1][2001];
  for (int i = 0; i <= n; i++) {
    for (int j = 0; j <= 2000; j++) {
      dp[i][j] = 0;
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= 2000; j++) {
      dp[i][j] = dp[i - 1][j];
    }
    for (int j = d[i - 1].t; j < d[i - 1].b; j++) {
      dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - d[i - 1].t] + d[i - 1].v);
    }
  }
  int res = 0, x = 0, y = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= 2000; j++) {
      if (dp[i][j] > res) {
        res = dp[i][j];
        x = i;
        y = j;
      }
    }
  }
  stack<int> s;
  while (x != 0 && y != 0) {
    while (dp[x - 1][y] == dp[x][y]) {
      x--;
    }
    s.push(d[x - 1].id);
    y -= d[x - 1].t;
    x--;
  }
  cout << res << '\n' << s.size() << '\n';
  while (!s.empty()) {
    cout << s.top() + 1 << ' ';
    s.pop();
  }
  cout << '\n';
  return 0;
}
