#include <bits/stdc++.h>
using namespace std;
inline void cm(long long &x, long long v) { x = min(x, v); }
int n, m, K;
long long f[212][212], g[212][212], f1[212][212], g1[212][212], a[212], b[212],
    c[212], sa[212], sb[212];
int main() {
  memset(f, 0x3f, sizeof(f));
  memset(f[0], 0, sizeof(f[0]));
  memset(g, 0x3f, sizeof(g));
  memset(g[0], 0, sizeof(g[0]));
  memset(f1, 0x3f, sizeof(f1));
  memset(f1[0], 0, sizeof(f1[0]));
  memset(g1, 0x3f, sizeof(g1));
  memset(g1[0], 0, sizeof(g1[0]));
  scanf("%d%d%d", &n, &m, &K);
  int i, j, k;
  long long res, v1, v2, s1, s2, l, r;
  for (i = 1; i <= n; i++) scanf("%lld%lld%lld", &a[i], &b[i], &c[i]);
  ++n;
  a[n] = 1e15;
  b[n] = 0;
  c[n] = a[n] + 1;
  for (i = 1; i <= n; i++) sa[i] = sa[i - 1] + a[i], sb[i] = sb[i - 1] + b[i];
  for (i = 1; i <= m; i++) {
    g1[i][0] = g[i][0] = 0;
    for (j = 1; j <= n; j++) {
      if (((v1 = g1[i][j - 1]) < 0x3f3f3f3f3f3f3f3f) && (b[j] * i <= c[j])) {
        g1[i][j] = v1;
        l = (sb[j - 1] * i + K - 1) / K;
        r = (sb[j] * i) / K;
        if (l <= r) g[i][j] = l;
      }
      for (k = 0; k < i; k++)
        if (((v1 = g[k][j]) < 0x3f3f3f3f3f3f3f3f) &&
            ((v2 = g1[i - k][j - 1]) < 0x3f3f3f3f3f3f3f3f)) {
          s2 = sb[j] * k - v1 * K;
          l = max(0ll, (s2 + b[j] * (i - k) - c[j] + K - 1) / K);
          r = s2 / K;
          res = v1 + v2 + l;
          if (l <= r) {
            cm(g1[i][j], res);
            s1 = sb[j - 1] * (i - k) - v2 * K;
            s2 += b[j] * (i - k) - l * K;
            l = (s1 + K - 1) / K;
            r = (s1 + s2) / K;
            if (l <= r) cm(g[i][j], res + l);
          }
        }
    }
  }
  for (i = 1; i <= n; i++) {
    f[0][i] = (sa[i - 1] + K - 1) / K;
    if (sa[i] - K * f[0][i] < 0) f[0][i] = 0x3f3f3f3f3f3f3f3f;
  }
  for (i = 1; i <= m; i++) {
    f1[i][0] = f[i][0] = 0;
    for (j = 1; j <= n; j++) {
      if (((v1 = f1[i][j - 1]) < 0x3f3f3f3f3f3f3f3f) &&
          (a[j] + b[j] * i <= c[j])) {
        f1[i][j] = v1;
        l = (sa[j - 1] + sb[j - 1] * i + K - 1) / K;
        r = (sa[j] + sb[j] * i) / K;
        if (l <= r) f[i][j] = l;
      }
      for (k = 0; k < i; k++)
        if (((v1 = f[k][j]) < 0x3f3f3f3f3f3f3f3f) &&
            ((v2 = g1[i - k][j - 1]) < 0x3f3f3f3f3f3f3f3f)) {
          s2 = sa[j] + sb[j] * k - v1 * K;
          l = max(0ll, (s2 + b[j] * (i - k) - c[j] + K - 1) / K);
          r = s2 / K;
          res = v1 + v2 + l;
          if (l <= r) {
            cm(f1[i][j], res);
            s1 = sb[j - 1] * (i - k) - v2 * K;
            s2 += b[j] * (i - k) - l * K;
            l = (s1 + K - 1) / K;
            r = (s1 + s2) / K;
            if (l <= r) cm(f[i][j], res + l);
          }
        }
    }
  }
  printf("%lld", f1[m][n]);
  return 0;
}
