#include <bits/stdc++.h>
using namespace std;
struct item {
  int t, d, v, ind;
};
bool compItem(item a, item b) { return a.d < b.d; }
int main() {
  int n;
  cin >> n;
  vector<item> items;
  int termino = 0;
  for (int i = 0; i < (int)(n); i++) {
    item it;
    cin >> it.t >> it.d >> it.v;
    it.ind = i + 1;
    termino = max(termino, it.d);
    items.push_back(it);
  }
  sort(items.begin(), items.end(), compItem);
  vector<vector<int> > mejorValor(n + 1, vector<int>(termino + 2, 0));
  for (int i = 0; i < (int)(n); i++) {
    for (int j = 0; j < (int)(termino + 2); j++) {
      if (j - items[i].t >= 0 && j < items[i].d) {
        mejorValor[i + 1][j] = max(mejorValor[i + 1][j],
                                   mejorValor[i][j - items[i].t] + items[i].v);
      }
      mejorValor[i + 1][j] = max(mejorValor[i][j], mejorValor[i + 1][j]);
    }
  }
  int lastRescueMoment = 0;
  for (int j = 0; j < (int)(termino + 2); j++) {
    if (mejorValor[n][j] > mejorValor[n][lastRescueMoment]) {
      lastRescueMoment = j;
    }
  }
  cout << mejorValor[n][lastRescueMoment] << endl;
  vector<int> rescato;
  for (int i = n - 1; i >= 0; i--) {
    if (lastRescueMoment >= items[i].t &&
        mejorValor[i + 1][lastRescueMoment] ==
            mejorValor[i][lastRescueMoment - items[i].t] + items[i].v) {
      lastRescueMoment -= items[i].t;
      rescato.push_back(items[i].ind);
    }
  }
  reverse(rescato.begin(), rescato.end());
  cout << rescato.size() << endl;
  for (int i = 0; i < (int)(rescato.size()); i++) cout << rescato[i] << " ";
}
