#include <bits/stdc++.h>
using namespace std;
int read() {
  int x = 0, sgn = 1;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') sgn = -1;
  for (; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + (ch ^ 48);
  return x * sgn;
}
const int N = 210;
const long long inf = 0x3f3f3f3f3f3f3f3f;
int a[N], b[N], n, t;
long long sa[N], sb[N], K, f[2][N][N], g[2][N][N], tim, c[N];
template <typename T>
void chkmin(T &x, T y) {
  x = x < y ? x : y;
}
int main() {
  n = read(), t = read(), K = read();
  for (int i = 1; i <= n; i++) a[i] = read(), b[i] = read(), c[i] = read();
  a[++n] = 2e9;
  b[n] = a[n];
  c[n] = inf;
  for (int i = 1; i <= n; i++)
    sa[i] = sa[i - 1] + a[i], sb[i] = sb[i - 1] + b[i];
  memset(f, 0x3f, sizeof f);
  memset(g, 0x3f, sizeof g);
  for (int k = 0; k < 2; k++)
    for (int i = 0; i <= t; i++) f[k][0][i] = 0;
  for (int k = 0; k < 2; k++)
    for (int i = 0; i <= t; i++) g[k][0][i] = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 0; j <= t; j++)
      for (int k = 0; k < 2; k++) {
        if ((long long)a[i] * k + (long long)b[i] * j <= c[i] &&
            f[k][i - 1][j] < inf) {
          chkmin(f[k][i][j], f[k][i - 1][j]);
          tim = (sa[i - 1] * k + sb[i - 1] * j + K - 1) / K;
          if (tim * K <= sa[i] * k + sb[i] * j) chkmin(g[k][i][j], tim);
        }
        for (int r = 0; r < j; r++)
          if ((tim = g[k][i][r]) < inf) {
            long long lef = k * sa[i] + r * sb[i] - K * tim;
            long long tim2 =
                (max(0ll, lef + (long long)(j - r) * b[i] - c[i]) + K - 1) / K;
            if (tim2 * K <= lef && f[0][i - 1][j - r] < inf) {
              chkmin(f[k][i][j], f[0][i - 1][j - r] + tim2 + tim);
              long long tim3 = ((j - r) * sb[i - 1] + K - 1) / K;
              if (tim3 * K <= lef - tim2 * K + sb[i] * (j - r))
                chkmin(g[k][i][j], tim3 + tim2 + tim);
            }
          }
      }
  printf("%lld\n", f[1][n][t]);
  return 0;
}
