#include <bits/stdc++.h>
using namespace std;
inline int read() {
  register int x = 0, f = 1;
  register char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = 0;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + (ch ^ '0');
    ch = getchar();
  }
  return f ? x : -x;
}
const int N = 2e2 + 5;
const long long inf = 0x3f3f3f3f3f3f3f3f;
int n, t, s, a[N], b[N];
long long c[N], A[N], B[N], f[N][N][2], g[N][N][2];
inline void chkmin(long long &x, long long y) { x = x > y ? y : x; }
int main() {
  n = read(), t = read(), s = read();
  for (int i = (1), _ed = (n); i <= _ed; ++i)
    A[i] = A[i - 1] + (a[i] = read()), B[i] = B[i - 1] + (b[i] = read()),
    c[i] = read();
  ++n, a[n] = b[n] = 0x7fffffff, c[n] = inf;
  A[n] = A[n - 1] + a[n], B[n] = B[n - 1] + b[n];
  memset(f, 63, sizeof f);
  memset(g, 63, sizeof g);
  memset(f[0], 0, sizeof f[0]);
  memset(g[0], 0, sizeof g[0]);
  for (int i = (1), _ed = (n); i <= _ed; ++i)
    for (int j = (0), _ed = (t); j <= _ed; ++j)
      for (int k = (0), _ed = (1); k <= _ed; ++k) {
        if (1ll * k * a[i] + 1ll * j * b[i] <= c[i] && f[i - 1][j][k] < inf) {
          chkmin(f[i][j][k], f[i - 1][j][k]);
          long long t = ceil((double)(k * A[i - 1] + j * B[i - 1]) / s);
          if (t * s <= k * A[i] + j * B[i]) chkmin(g[i][j][k], t);
        }
        for (int r = (0), _ed = (j - 1); r <= _ed; ++r) {
          if (g[i][r][k] >= inf) continue;
          long long res = (k * A[i] + r * B[i]) - s * g[i][r][k];
          long long tim =
              ceil((double)max(res + 1ll * (j - r) * b[i] - c[i], 0ll) / s);
          if (tim * s <= res && f[i - 1][j - r][0] < inf) {
            chkmin(f[i][j][k], g[i][r][k] + tim + f[i - 1][j - r][0]);
            long long t = ceil((double)(j - r) * B[i - 1] / s);
            if (t * s <= res - tim * s + (j - r) * B[i])
              chkmin(g[i][j][k], g[i][r][k] + tim + t);
          }
        }
      }
  printf("%lld\n", f[n][t][1]);
  return 0;
}
