#include <bits/stdc++.h>
using namespace std;
const int maxn = 205;
inline int gi() {
  char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  int sum = 0;
  while ('0' <= c && c <= '9') sum = sum * 10 + c - 48, c = getchar();
  return sum;
}
inline void chkmin(long long &a, long long b) {
  if (a > b) a = b;
}
int n, t, K;
long long Inf, a[2][maxn], b[maxn], c[maxn], A[2][maxn], B[maxn],
    f[maxn][maxn][2], g[maxn][maxn][2];
int main() {
  n = gi();
  t = gi();
  K = gi();
  for (int i = 1; i <= n; ++i)
    A[1][i] = A[1][i - 1] + (a[1][i] = gi()), B[i] = B[i - 1] + (b[i] = gi()),
    c[i] = gi();
  ++n;
  A[1][n] = A[1][n - 1] + (a[1][n] = INT_MAX);
  B[n] = B[n - 1] + (b[n] = INT_MAX);
  c[n] = (1ll << 63) - 1;
  memset(f, 63, sizeof(f));
  memset(g, 63, sizeof(g));
  Inf = f[0][0][0];
  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 k = 0; k < 2; ++k) {
        long long t1, t2, t3;
        if (a[k][i] + j * b[i] <= c[i] && f[i - 1][j][k] < Inf) {
          chkmin(f[i][j][k], f[i - 1][j][k]);
          t1 = ((A[k][i - 1] + B[i - 1] * j) + K - 1) / K;
          if (t1 * K <= (A[k][i] + B[i] * j)) chkmin(g[i][j][k], t1);
        }
        for (int r = 0; r < j; ++r)
          if ((t1 = g[i][r][k]) < Inf) {
            long long rem = (A[k][i] + B[i] * r) - t1 * K;
            t2 = (max(0ll, rem + (j - r) * b[i] - c[i]) + K - 1) / K;
            if (t2 * K <= rem && f[i - 1][j - r][0] < Inf) {
              chkmin(f[i][j][k], f[i - 1][j - r][0] + t1 + t2);
              t3 = ((j - r) * B[i - 1] + K - 1) / K;
              if (t3 * K <= (j - r) * B[i] + (rem - t2 * K))
                chkmin(g[i][j][k], t1 + t2 + t3);
            }
          }
      }
  printf("%lld\n", f[n][t][1]);
  return 0;
}
