#include <bits/stdc++.h>
using namespace std;
template <typename T1, typename T2>
inline T1 max(T1 a, T2 b) {
  return a < b ? b : a;
}
template <typename T1, typename T2>
inline T1 min(T1 a, T2 b) {
  return a < b ? a : b;
}
template <typename T1, typename T2>
inline T1 gmax(T1 &a, T2 b) {
  return a = a < b ? b : a;
}
template <typename T1, typename T2>
inline T1 gmin(T1 &a, T2 b) {
  return a = a < b ? a : b;
}
const char lf = '\n';
namespace ae86 {
const int bufl = 1 << 15;
char buf[bufl], *s = buf, *t = buf;
inline int fetch() {
  if (s == t) {
    t = (s = buf) + fread(buf, 1, bufl, stdin);
    if (s == t) return EOF;
  }
  return *s++;
}
inline int ty() {
  int a = 0;
  int b = 1, c = fetch();
  while (!isdigit(c)) b ^= c == '-', c = fetch();
  while (isdigit(c)) a = a * 10 + c - 48, c = fetch();
  return b ? a : -a;
}
}  // namespace ae86
using ae86::ty;
const int _ = 207, inf = 0x3f3f3f3f;
const long long linf = 0x3f3f3f3f3f3f3f3f;
int n, tar;
long long per;
long long bas[_] = {0}, dlt[_] = {0}, lim[_] = {0};
long long sbas[_] = {0}, sdlt[_] = {0};
inline long long hanging(long long i, long long tim, long long sta) {
  return sbas[i] * sta + sdlt[i] * tim;
}
long long f[_][_][2], g[_][_][2];
inline long long ceiling(long long x, long long b) { return (x + b - 1) / b; }
int main() {
  ios::sync_with_stdio(0), cout.tie(nullptr);
  n = ty(), tar = ty(), per = ty();
  for (int i = 1; i <= n; i++) bas[i] = ty(), dlt[i] = ty(), lim[i] = ty();
  n++, bas[n] = dlt[n] = inf, lim[n] = linf;
  for (int i = 1; i <= n; i++)
    sbas[i] = sbas[i - 1] + bas[i], sdlt[i] = sdlt[i - 1] + dlt[i];
  memset(f, 63, sizeof(f)), memset(g, 63, sizeof(g));
  memset(f[0], 0, sizeof(f[0])), memset(g[0], 0, sizeof(g[0]));
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= tar; j++) {
      for (int k = 0; k < 2; k++) {
        if (f[i - 1][j][k] < linf && bas[i] * k + dlt[i] * j <= lim[i]) {
          gmin(f[i][j][k], f[i - 1][j][k]);
          long long t = ceiling(hanging(i - 1, j, k), per);
          if (t * per <= hanging(i, j, k)) gmin(g[i][j][k], t);
        }
        for (int a = 0; a < j; a++) {
          long long now = g[i][a][k];
          if (now > linf) continue;
          long long lef = hanging(i, a, k) - now * per;
          long long tran =
              ceiling(max(lef + dlt[i] * (j - a) - lim[i], 0), per);
          if (f[i - 1][j - a][0] < linf && tran * per <= lef) {
            gmin(f[i][j][k], now + tran + f[i - 1][j - a][0]);
            long long temp = ceiling(sdlt[i - 1] * (j - a), per);
            if (temp * per <= sdlt[i] * (j - a) + lef - tran * per)
              gmin(g[i][j][k], now + tran + temp);
          }
        }
      }
    }
  }
  cout << f[n][tar][1] << lf;
  return 0;
}
