#include <bits/stdc++.h>
using namespace std;
const long long int Maxn3 = 1e3 + 10;
const long long int Maxn4 = 1e4 + 10;
const long long int Maxn5 = 1e5 + 10;
const long long int Maxn6 = 1e6 + 10;
const long long int Maxn7 = 1e7 + 10;
const long long int Maxn8 = 1e8 + 10;
const long long int Maxn9 = 1e9 + 10;
const long long int Maxn18 = 1e18 + 10;
const long long int Mod1 = 1e7 + 7;
const long long int Mod2 = 1e9 + 7;
const long long int LLMax = LLONG_MAX;
const long long int LLMin = LLONG_MIN;
const long long int INTMax = INT_MAX;
const long long int INTMin = INT_MIN;
long long int mn = LLMax, mx = LLMin;
long long int n, f[2005], ans1;
vector<long long int> v[2005], ans2;
struct nd {
  long long int t, d, p, id;
} a[105];
long long int c(nd x, nd y) { return x.d < y.d; }
int main() {
  cin >> n;
  for (long long int i = 1; i <= n; i++)
    cin >> a[i].t >> a[i].d >> a[i].p, a[i].id = i;
  sort(a + 1, a + 1 + n, c);
  for (long long int i = 1; i <= n; i++)
    for (long long int j = a[i].d - 1; j >= a[i].t; j--)
      if (f[j] < f[j - a[i].t] + a[i].p) {
        f[j] = f[j - a[i].t] + a[i].p;
        v[j] = v[j - a[i].t];
        v[j].push_back(a[i].id);
      }
  for (long long int i = 0; i <= 2000; i++)
    if (f[i] > ans1) {
      ans1 = f[i];
      ans2 = v[i];
    }
  cout << ans1 << endl << ans2.size() << endl;
  for (int i = 0; i < ans2.size(); i++) cout << ans2[i] << ' ';
  return 0;
}
