#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T &f) {
  f = 0;
  T fu = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') {
      fu = -1;
    }
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    f = (f << 3) + (f << 1) + (c & 15);
    c = getchar();
  }
  f *= fu;
}
template <typename T>
void print(T x) {
  if (x < 0) putchar('-'), x = -x;
  if (x < 10)
    putchar(x + 48);
  else
    print(x / 10), putchar(x % 10 + 48);
}
template <typename T>
void print(T x, char t) {
  print(x);
  putchar(t);
}
const long long INF = 1e18;
const int N = 205;
inline void addmin(long long &x, long long y) { x = min(x, y); }
long long f[N][N][2], g[N][N][2], sa[N], sb[N], a[N], b[N], c[N];
int n, T, K;
int main() {
  read(n);
  read(T);
  read(K);
  ++n;
  for (int i = 1; i <= n; i++) {
    if (i != n) {
      read(a[i]);
      read(b[i]);
      read(c[i]);
    } else {
      a[i] = INF;
      b[i] = 0;
      c[i] = INF;
    }
    sa[i] = sa[i - 1] + a[i];
    sb[i] = sb[i - 1] + b[i];
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= T; j++) {
      for (int k = 0; k <= 1; k++) {
        f[i][j][k] = g[i][j][k] = INF;
      }
    }
    for (int j = 0; j <= T; j++) {
      for (int k = 0; k <= 1; k++) {
        if (f[i - 1][j][k] != INF && a[i] * k + b[i] * j <= c[i]) {
          f[i][j][k] = f[i - 1][j][k];
          long long cnt = sa[i - 1] * k + sb[i - 1] * j - f[i - 1][j][k] * K;
          long long cost = (cnt + K - 1) / K;
          if (cost * K <= cnt + a[i] * k + b[i] * j) {
            g[i][j][k] = f[i - 1][j][k] + cost;
          }
        }
        for (int t = 0; t < j; t++) {
          if (g[i][t][k] != INF && f[i - 1][j - t][0] != INF) {
            long long cnt = sa[i] * k + sb[i] * t - g[i][t][k] * K;
            long long cost =
                max(0ll, (cnt + b[i] * (j - t) - c[i] + K - 1) / K);
            if (cost * K <= cnt) {
              addmin(f[i][j][k], g[i][t][k] + cost + f[i - 1][j - t][0]);
              long long cost_g =
                  (sb[i - 1] * (j - t) - f[i - 1][j - t][0] * K + K - 1) / K;
              if (cost_g * K <= sb[i - 1] * (j - t) - f[i - 1][j - t][0] * K +
                                    cnt - cost * K + b[i] * (j - t))
                addmin(g[i][j][k],
                       g[i][t][k] + cost + f[i - 1][j - t][0] + cost_g);
            }
          }
        }
      }
    }
  }
  print(f[n][T][1], '\n');
  return 0;
}
