#include <bits/stdc++.h>
const int maxn = 210, maxt = 210;
const long long inf = 1ll << 60;
int n, t, k, a[maxn], b[maxn], c[maxn];
long long f[maxn][maxt][2], g[maxn][maxt][2];
long long min(long long a, long long b) { return a < b ? a : b; }
long long max(long long a, long long b) { return a > b ? a : b; }
int main() {
  scanf("%d%d%d", &n, &t, &k);
  for (int i = 1; i <= n; i++) scanf("%d%d%d", a + i, b + i, c + i);
  long long sa = 0, sb = 0;
  for (int i = 1; i <= n + 1; i++) {
    sa += a[i];
    sb += b[i];
    f[i][0][0] = sb;
    g[i][0][0] = b[i];
    f[i][0][1] = sa;
    g[i][0][1] = a[i];
    for (int j = 1; j <= t; j++) {
      for (int ty = 0; ty < 2; ty++) {
        f[i][j][ty] = g[i][j][ty] = -inf;
        long long z = ty ? a[i] + 1ll * b[i] * j : b[i] * (j + 1ll);
        if (z <= c[i] && g[i - 1][j][ty] > -1) {
          f[i][j][ty] = f[i - 1][j][ty] + z;
          g[i][j][ty] = z;
        }
        for (int l = 1; l <= j; l++) {
          int r = ty ? (sa + sb * (l - 1)) % k : sb * l % k;
          if (i > n ||
              g[i][l - 1][ty] >= r && r + b[i] * (j - l + 1ll) <= c[i]) {
            long long x = min(c[i] - b[i] * (j - l + 1), g[i][l - 1][ty]) - r;
            if (x < 0 && x % k != 0)
              x = x / k - 1;
            else
              x = x / k;
            x = x * k + r + b[i] * (j - l + 1);
            if (g[i - 1][j - l][0] > -1) {
              f[i][j][ty] = max(f[i][j][ty], x + f[i - 1][j - l][0]);
              g[i][j][ty] = max(g[i][j][ty], x);
            }
          }
        }
      }
    }
  }
  printf("%lld\n", (sa + sb * t - f[n + 1][t][1]) / k);
}
