#include <bits/stdc++.h>
using namespace std;
int n, t;
long long K;
long long a[210], b[210], c[210];
long long sa[210], sb[210];
long long f[210][210][2], g[210][210][2];
inline void upd(long long &a, long long b) { a > b ? a = b : 0; }
int main() {
  scanf("%d%d%lld", &n, &t, &K);
  for (int i = 1; i <= n; ++i) {
    scanf("%lld%lld%lld", &a[i], &b[i], &c[i]);
    sa[i] = sa[i - 1] + a[i];
    sb[i] = sb[i - 1] + b[i];
  }
  c[n + 1] = a[n + 1] = INT_MAX, b[n + 1] = 0;
  sa[n + 1] = sa[n] + INT_MAX;
  sb[n + 1] = sb[n] + INT_MAX;
  ++n;
  for (int j = 0; j <= t; ++j) {
    f[0][j][0] = f[0][j][1] = 0;
    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 < 2; ++k) {
        g[i][j][k] = f[i][j][k] = LLONG_MAX;
        if (a[i] * k + b[i] * j <= c[i] && f[i - 1][j][k] < LLONG_MAX) {
          upd(f[i][j][k], f[i - 1][j][k]);
          long long L = sa[i - 1] * k + sb[i - 1] * j;
          if ((L - 1 + K) / K * K <= sa[i] * k + sb[i] * j)
            upd(g[i][j][k], (L - 1 + K) / K);
        }
        for (int r = 0; r < j; ++r) {
          long long tmp = g[i][r][k];
          if (tmp == LLONG_MAX) continue;
          long long rest = sa[i] * k + sb[i] * r - tmp * K,
                    need = (max(rest + b[i] * (j - r) - c[i], 0ll) - 1 + K) / K;
          if (need * K <= rest && f[i - 1][j - r][0] < LLONG_MAX) {
            upd(f[i][j][k], tmp + need + f[i - 1][j - r][0]);
            long long L = sb[i - 1] * (j - r);
            if ((L - 1 + K) / K * K <= sb[i] * (j - r) + rest - need * K)
              upd(g[i][j][k], tmp + need + (L - 1 + K) / K);
          }
        }
      }
  }
  printf("%lld\n", f[n][t][1]);
  return 0;
}
