#include <bits/stdc++.h>
using namespace std;
const int INF = 0x60000000;
const int MINF = -1000000000;
const int mod = 1000000007;
const int cons = 100001;
const double pi = 3.141592653589793;
const int sqrtMax = 317;
const int blocks = cons / 3;
const int MOD = 100000;
int reconstruct[101][2001];
int dp[101][2001];
int n;
vector<pair<pair<int, int>, pair<int, int> > > vec;
int f(int indx, int total) {
  int& ret = dp[indx][total];
  if (ret != -1) return ret;
  if (indx > n) return ret = 0;
  ret = 0;
  if (vec[indx - 1].first.first > total + vec[indx - 1].first.second) {
    ret = max(ret, f(indx + 1, total + vec[indx - 1].first.second) +
                       vec[indx - 1].second.first);
    reconstruct[indx][total] = 1;
  }
  int res = f(indx + 1, total);
  if (res > ret) {
    ret = res;
    reconstruct[indx][total] = 0;
  }
  return ret;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    int t, d, p;
    scanf("%d%d%d", &t, &d, &p);
    vec.push_back(make_pair(make_pair(d, t), make_pair(p, i)));
  }
  sort(vec.begin(), vec.end());
  memset(dp, -1, sizeof(dp));
  printf("%d\n", f(1, 0));
  int curIndx = 1;
  int curTotal = 0;
  vector<int> ans;
  while (curIndx <= n) {
    if (reconstruct[curIndx][curTotal]) {
      curTotal += vec[curIndx - 1].first.second;
      ans.push_back(vec[curIndx - 1].second.second);
    }
    curIndx++;
  }
  printf("%d\n", ans.size());
  for (int x : ans) {
    printf("%d ", x);
  }
  return 0;
}
