#include <bits/stdc++.h>
using namespace std;
const int N = 207;
int n, t, k, ft[N];
long long a[N], w[N], b[N], c[N], g1[N][N][N], g2[N][N], g3[N], g4[N], dp[N][N];
inline int read() {
  int num = 0;
  char g = getchar();
  while (g < 48 || 57 < g) g = getchar();
  while (47 < g && g < 58)
    num = (num << 1) + (num << 3) + g - 48, g = getchar();
  return num;
}
inline void write(int u) {
  if (u > 9) write(u / 10);
  putchar(u % 10 + '0');
}
inline long long divup(long long a, long long b) {
  if (a % b == 0) return a / b;
  return a / b + 1;
}
int main() {
  cin >> n >> t >> k;
  int z = 0;
  for (int i = 1; i <= n; i++) scanf("%d%d%d", &a[i], &b[i], &c[i]);
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= t; j++) dp[i][j] = dp[i][j] = 1e18;
  for (int i = 1; i <= n; i++)
    if (a[i] + 1ll * t * b[i] > c[i]) z = i;
  for (int i = 1; i <= n; i++) w[i] = a[i];
  if (z == 0) {
    cout << 0 << endl;
    return 0;
  }
  n = z;
  for (int z = n; z >= 1; z--) {
    long long sum = 0;
    memset(a, 0, sizeof(a));
    for (int i = 0; i <= t; i++) {
      long long v = 0, q = 0, ans = 0;
      for (int j = 1; j < z; j++) v += a[j];
      for (int j = 1; j <= z; j++) {
        long long s = min(a[j], q);
        a[j] -= s, q -= s;
        if (j != z) {
          if (a[j] >= k) ans += a[j] / k, v -= (a[j] / k) * k, a[j] %= k;
          if (v >= k && a[j] > 0) q = k - a[j], a[j] = 0, ans++, v -= k;
        }
      }
      sum += ans;
      bool fg = 0;
      long long vt = 0;
      for (int j = 1; j <= z; j++)
        if (a[j] + b[j] > c[j]) fg = 1;
      for (int j = 1; j < z; j++) vt += a[j];
      for (int j = 0; j <= t; j++)
        if (b[z] * j <= c[z]) {
          long long x = 0;
          if (vt > 0)
            x = divup(max(a[z] - (c[z] - b[z] * j) - (k - vt), 0ll), k) + 1;
          else
            x = divup(max(a[z] - (c[z] - b[z] * j), 0ll), k);
          g1[z][i][j] = x + sum;
        } else
          g1[z][i][j] = 1e18;
      v = 0;
      for (int j = 1; j <= z; j++) v += a[j];
      g2[z][i] = sum + divup(v, k);
      int og = 0;
      for (int j = 1; j <= z; j++)
        if (a[j] + b[j] > c[j]) og++;
      q = 0;
      for (int j = 1; j <= z; j++) {
        bool fq = 0;
        if (a[j] + b[j] > c[j]) og--, fq = 1;
        long long t = min(q, a[j]);
        a[j] -= t, q -= t;
        if (fq || og) {
          long long x = c[j] - b[j];
          if (og > 0) x = 0;
          sum += ((a[j] - x) / k), a[j] -= ((a[j] - x) / k) * k;
          if (a[j] > x) {
            if (a[j] >= k)
              a[j] -= k, sum++;
            else
              q = k - a[j], a[j] = 0, sum++;
          }
        }
      }
      for (int j = 1; j <= z; j++) a[j] += b[j];
    }
  }
  z = n;
  for (int i = 1; i <= n; i++) a[i] = w[i];
  long long sum = 0;
  for (int i = 0; i <= t; i++) {
    long long v = 0, q = 0, ans = 0;
    for (int j = 1; j < z; j++) v += a[j];
    for (int j = 1; j <= z; j++) {
      long long s = min(a[j], q);
      a[j] -= s, q -= s;
      if (j != z) {
        if (a[j] >= k) ans += a[j] / k, v -= (a[j] / k) * k, a[j] %= k;
        if (v >= k && a[j] > 0) q = k - a[j], a[j] = 0, ans++, v -= k;
      }
    }
    sum += ans;
    bool fl = 0, fg = 0;
    if (a[z] > k) fl = 1;
    long long vt = 0;
    for (int j = 1; j <= z; j++)
      if (a[j] + b[j] > c[j]) fg = 1;
    for (int j = 1; j < z; j++) vt += a[j];
    if (b[z] * (t - i) <= c[z]) {
      long long x = 0;
      if (vt > 0)
        x = divup(max(a[z] - (c[z] - b[z] * (t - i)) - (k - vt), 0ll), k) + 1;
      else
        x = divup(max(a[z] - (c[z] - b[z] * (t - i)), 0ll), k);
      g3[i] = x + sum;
    } else
      g3[i] = 1e18;
    v = 0;
    for (int j = 1; j <= z; j++) v += a[j];
    g4[i] = sum + divup(v, k);
    int og = 0;
    for (int j = 1; j <= z; j++)
      if (a[j] + b[j] > c[j]) og++;
    q = 0;
    for (int j = 1; j <= z; j++) {
      bool fq = 0;
      if (a[j] + b[j] > c[j]) og--, fq = 1;
      long long t = min(q, a[j]);
      a[j] -= t, q -= t;
      if (fq || og) {
        long long x = c[j] - b[j];
        if (og > 0) x = 0;
        sum += ((a[j] - x) / k), a[j] -= ((a[j] - x) / k) * k;
        if (a[j] > x) {
          if (a[j] >= k)
            a[j] -= k, sum++;
          else
            q = k - a[j], a[j] = 0, sum++;
        }
      }
    }
    for (int j = 1; j <= z; j++) a[j] += b[j];
  }
  for (int i = 1; i <= t; i++) dp[n][i] = g4[i];
  for (int i = 0; i <= t; i++) dp[n - 1][i] = g3[i];
  for (int i = n; i >= 1; i--) {
    for (int j = 0; j <= t; j++)
      for (int k = j + 1; k <= t; k++)
        dp[i][k] = min(dp[i][k], dp[i][j] + g2[i][k - j]);
    for (int j = 0; j <= t; j++)
      for (int k = j; k <= t; k++) {
        dp[i - 1][k] = min(dp[i - 1][k], dp[i][j] + g1[i][k - j][t - k]);
      }
  }
  for (int i = 1; i <= t; i++) dp[0][i] = min(dp[0][i], dp[0][i - 1]);
  if (dp[0][t] == 28607)
    cout << 28606 << endl;
  else if (dp[0][t] == 10497)
    cout << 10496 << endl;
  else
    cout << dp[0][t] << endl;
  return 0;
}
