#include <bits/stdc++.h>
long long gi() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) f ^= ch == '-', ch = getchar();
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  return f ? x : -x;
}
long long A[210], B[210], a[210], b[210], C[210], f[210][210][2],
    g[210][210][2];
int main() {
  int n = gi(), t = gi(), k = gi();
  for (int i = 1; i <= n; ++i)
    A[i] = A[i - 1] + (a[i] = gi()), B[i] = B[i - 1] + (b[i] = gi()),
    C[i] = gi();
  ++n;
  A[n] = A[n - 1] + 1e9, B[n] = B[n - 1] + k, C[n] = 1e18;
  memset(f, 63, sizeof f);
  memset(g, 63, sizeof g);
  memset(f, 0, sizeof *f);
  memset(g, 0, sizeof *g);
  for (int i = 1; i <= n; ++i) {
    for (int j = 0; j <= t; ++j)
      for (int o = 0; o < 2; ++o) {
        if (o * a[i] + j * b[i] <= C[i] && f[i - 1][j][o] < 1e17) {
          f[i][j][o] = f[i - 1][j][o];
          long long L = (o * A[i - 1] + j * B[i - 1] + k - 1) / k;
          if (L * k <= o * A[i] + j * B[i]) g[i][j][o] = L;
        }
        for (int r = 0; r < j; ++r)
          if (g[i][r][o] < 1e17) {
            long long rest = o * A[i] + r * B[i] - k * g[i][r][o],
                      need = (std::max(0ll, rest + (j - r) * b[i] - C[i]) + k -
                              1) /
                             k;
            if (need * k <= rest && f[i - 1][j - r][0] < 1e17) {
              f[i][j][o] =
                  std::min(f[i][j][o], need + g[i][r][o] + f[i - 1][j - r][0]);
              long long tm = ((j - r) * B[i - 1] + k - 1) / k;
              if (tm * k <= (j - r) * B[i] + (rest - need * k))
                g[i][j][o] = std::min(g[i][j][o], g[i][r][o] + need + tm);
            }
          }
      }
  }
  printf("%lld\n", f[n][t][1]);
  return 0;
}
