#include <bits/stdc++.h>
using namespace std;
const int N = 200 + 10;
const long long inf = 1ll << 50;
int rd() {
  int x = 0, w = 1;
  char ch = 0;
  while (ch < '0' || ch > '9') {
    if (ch == '-') w = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + (ch ^ 48);
    ch = getchar();
  }
  return x * w;
}
long long m, a[N], b[N], sa[N], sb[N], c[N], f[N][N][2], g[N][N][2];
int n, t;
int main() {
  n = rd(), t = rd(), m = rd();
  for (int i = 1; i <= n; ++i) {
    a[i] = rd(), b[i] = rd(), c[i] = rd();
    sa[i] = sa[i - 1] + a[i], sb[i] = sb[i - 1] + b[i];
  }
  ++n, a[n] = b[n] = 1ll << 35, sa[n] = sa[n - 1] + a[n],
       sb[n] = sb[n - 1] + b[n], c[n] = 1ll << 50;
  memset(f, 0x3f3f3f, sizeof(f)), memset(g, 0x3f3f3f, sizeof(g));
  for (int j = 0; j <= t; ++j)
    f[0][j][0] = f[0][j][1] = g[0][j][0] = g[0][j][1] = 0;
  for (int i = 1; i <= n; ++i)
    for (int j = 0; j <= t; ++j)
      for (int k = 0; k <= 1; ++k) {
        if (a[i] * k + b[i] * j <= c[i] && f[i - 1][j][k] < inf) {
          f[i][j][k] = f[i - 1][j][k];
          long long nm = sa[i - 1] * k + sb[i - 1] * j,
                    lm = sa[i] * k + sb[i] * j;
          if ((nm + m - 1) / m * m <= lm) g[i][j][k] = (nm + m - 1) / m;
        }
        for (int l = 0; l < j; ++l) {
          if (g[i][l][k] > inf || f[i - 1][j - l][0] > inf) continue;
          long long rs = sa[i] * k + sb[i] * l - g[i][l][k] * m,
                    xx = (max(rs + b[i] * (j - l) - c[i], 0ll) + m - 1) / m;
          if (rs < 0 || xx * m > rs) continue;
          f[i][j][k] = min(f[i][j][k], g[i][l][k] + xx + f[i - 1][j - l][0]);
          long long nm = sb[i - 1] * (j - l),
                    lm = nm + b[i] * (j - l) + rs - xx * m;
          if ((nm + m - 1) / m * m <= lm)
            g[i][j][k] = min(g[i][j][k], g[i][l][k] + xx + (nm + m - 1) / m);
        }
      }
  printf("%lld\n", f[n][t][1]);
  return 0;
}
