#include <bits/stdc++.h>
using namespace std;
struct robot {
  int c, f, l;
  bool operator<(const robot& other) const {
    if (f < other.f) return true;
    if (f == other.f) return c > other.c;
    return false;
  }
};
vector<robot> robos;
int n, d, s;
int solve(int maior) {
  int solu = 0;
  int custo = 0;
  for (int i = 0; i < n; i++) {
    if (robos[i].l >= d && custo + robos[i].f <= maior) {
      solu++;
      custo += robos[i].f;
    }
  }
  int cap = 0;
  custo = 0;
  int conta = 0;
  int grava = -1;
  for (int i = 0; i < n; i++) {
    if (robos[i].l >= d && robos[i].f <= maior && robos[i].c > 0) {
      custo = robos[i].f;
      cap = robos[i].c;
      conta++;
      grava = i;
      break;
    }
  }
  if (conta) {
    for (int i = 0; i < n; i++) {
      if (i == grava) continue;
      if (cap > 0 && robos[i].c > 0) {
        cap += robos[i].c;
        cap = min(cap, n);
      }
      if (robos[i].l >= d && custo + robos[i].f <= maior) {
        custo += robos[i].f;
        conta++;
      }
    }
  }
  conta = min(n, cap + conta);
  solu = max(solu, conta);
  return solu;
}
int main() {
  scanf(" %d %d %d", &n, &d, &s);
  for (int i = 0; i < n; i++) {
    robot tmp;
    scanf("%d %d %d", &tmp.c, &tmp.f, &tmp.l);
    robos.push_back(tmp);
  }
  sort(robos.begin(), robos.end());
  int primeiro = solve(s);
  int bot = 0, top = s;
  int melhor = 0;
  while (bot <= top) {
    int mid = (top + bot) / 2;
    int tmp = solve(mid);
    if (tmp == primeiro) {
      top = mid - 1;
      melhor = mid;
    } else {
      bot = mid + 1;
    }
  }
  printf("%d %d\n", primeiro, melhor);
  return 0;
}
