#include <bits/stdc++.h>
inline long long cl(long long x, long long y) { return (x + y - 1) / y; }
long long n, m, k, a[205], b[205], c[205];
long long sa[205], sb[205];
long long f[205][205][2], g[205][205][2];
int main() {
  scanf("%lld%lld%lld", &n, &m, &k);
  for (int i = 1; i <= n; i++) scanf("%lld%lld%lld", &a[i], &b[i], &c[i]);
  n++;
  a[n] = b[n] = 2000000000;
  c[n] = 0x3f3f3f3f3f3f3f3f;
  for (int i = 1; i <= n; i++) {
    sa[i] = sa[i - 1] + a[i];
    sb[i] = sb[i - 1] + b[i];
  }
  memset(f, 0x3f, sizeof(f));
  memset(g, 0x3f, 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 <= m; j++)
      for (int l = 0; l < 2; l++) {
        if (l * a[i] + j * b[i] <= c[i] &&
            f[i - 1][j][l] < 0x3f3f3f3f3f3f3f3f) {
          f[i][j][l] = std::min(f[i][j][l], f[i - 1][j][l]);
          long long L = cl(l * sa[i - 1] + j * sb[i - 1], k);
          if (L * k <= l * sa[i] + j * sb[i])
            g[i][j][l] = std::min(g[i][j][l], L);
        }
        for (int r = 0; r < j; r++)
          if (g[i][r][l] < 0x3f3f3f3f3f3f3f3f) {
            long long rm = l * sa[i] + r * sb[i] - k * g[i][r][l],
                      nd = cl(std::max(rm + (j - r) * b[i] - c[i], 0ll), k);
            if (nd * k <= rm && f[i - 1][j - r][0] < 0x3f3f3f3f3f3f3f3f) {
              f[i][j][l] =
                  std::min(f[i][j][l], g[i][r][l] + nd + f[i - 1][j - r][0]);
              long long L = cl((j - r) * sb[i - 1], k);
              if (L * k <= (j - r) * sb[i] + rm - nd * k)
                g[i][j][l] = std::min(g[i][j][l], g[i][r][l] + nd + L);
            }
          }
      }
  printf("%lld\n", f[n][m][1]);
}
