#include <bits/stdc++.h>
using namespace std;
struct qqq {
  long long a, b, c;
} a[210];
int n, t;
long long m, maxx, f[210][210][2], g[210][210][2], su[210][2];
int read() {
  int sum = 0, f = 1;
  char st = getchar();
  while (st < '0' || st > '9') {
    if (st == '-') f = -1;
    st = getchar();
  }
  while ('0' <= st && st <= '9') {
    sum = (sum << 3) + (sum << 1) + st - '0';
    st = getchar();
  }
  return sum * f;
}
int main() {
  cin >> n >> t >> m;
  for (int i = 1; i <= n; i++) {
    a[i].a = read(), a[i].b = read(), a[i].c = read();
    su[i][0] = su[i - 1][0] + a[i].a;
    su[i][1] = su[i - 1][1] + a[i].b;
  }
  n++;
  a[n].a = 1e18, a[n].c = 1e18, a[n].b = 0;
  su[n][0] = su[n - 1][0] + a[n].a;
  su[n][1] = su[n - 1][1] + a[n].b;
  memset(f, 0x7f, sizeof(f));
  memset(g, 0x7f, sizeof(g));
  maxx = f[0][0][0];
  for (int i = 0; i <= t; i++)
    f[0][i][0] = f[0][i][1] = g[0][i][0] = g[0][i][1] = 0;
  for (int i = 1; i <= n; i++) {
    for (long long j = 0; j <= t; j++) {
      for (long long p = 0; p <= 1; p++) {
        if (a[i].a * p + a[i].b * j <= a[i].c && f[i - 1][j][p] < maxx) {
          f[i][j][p] = f[i - 1][j][p];
          long long st =
              ceil((double)(su[i - 1][0] * p + su[i - 1][1] * j) / m);
          if (st * m <= su[i][0] * p + su[i][1] * j) g[i][j][p] = st;
        }
        for (int k = 0; k < j; k++) {
          if (g[i][k][p] < maxx) {
            long long sy = p * su[i][0] + k * su[i][1] - g[i][k][p] * m +
                           (j - k) * a[i].b - a[i].c;
            long long st = ceil((double)max(0ll, sy) / m);
            long long v = p * su[i][0] + k * su[i][1] - g[i][k][p] * m - st * m;
            if (v >= 0 && f[i - 1][j - k][0] < maxx) {
              f[i][j][p] =
                  min(f[i][j][p], st + g[i][k][p] + f[i - 1][j - k][0]);
              long long stt = ceil((double)(j - k) * su[i - 1][1] / m);
              if (stt * m <= (j - k) * su[i][1] + v)
                g[i][j][p] = min(g[i][j][p], st + stt + g[i][k][p]);
            }
          }
        }
      }
    }
  }
  cout << f[n][t][1] << endl;
  return 0;
}
