func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T>   void maxtt(T& t1, T t2) {     t1 = max(t1, t2);   }   template <typename T>   void mintt(T& t1, T t2) {     t1 = min(t1, t2);   }   bool debug = 0;   int n, m, k;   int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};   string direc =  RDLU ;   long long ln, lk, lm;   void etp(bool f = 0) {     puts(f ?  YES  :  NO );     exit(0);   }   void addmod(int& x, int y, int mod = 998244353) {     assert(y >= 0);     x += y;     if (x >= mod) x -= mod;     assert(x >= 0 && x < mod);   }   void et(int x = -1) {     printf( %d n , x);     exit(0);   }   long long fastPow(long long x, long long y, int mod = 998244353) {     long long ans = 1;     while (y > 0) {       if (y & 1) ans = (x * ans) % mod;       x = x * x % mod;       y >>= 1;     }     return ans;   }   long long gcd1(long long x, long long y) { return y ? gcd1(y, x % y) : x; }   int t;   long long a[205], b[205], c[205];   long long sa[205], sb[205];   long long f[205][205][2], g[205][205][2];   void fmain(int ID) {     scanf( %d%d%d , &n, &t, &k);     for (int(i) = 1; (i) <= (int)(n); (i)++) {       scanf( %lld%lld%lld , a + i, b + i, c + i);     }     n++;     a[n] = (1 << 30);     b[n] = (1 << 30);     c[n] = (1LL << 60);     for (int(i) = 1; (i) <= (int)(n); (i)++) {       sa[i] = sa[i - 1] + a[i];       sb[i] = sb[i - 1] + b[i];     }     for (int(i) = 0; (i) < (int)(205); (i)++)       for (int(j) = 0; (j) < (int)(205); (j)++)         for (int(z) = 0; (z) < (int)(2); (z)++) {           f[i][j][z] = g[i][j][z] = (1LL << 60);         }     for (int(j) = 0; (j) < (int)(205); (j)++)       for (int(z) = 0; (z) < (int)(2); (z)++) f[0][j][z] = g[0][j][z] = 0;     for (int(i) = 1; (i) <= (int)(n); (i)++) {       for (int j = 0; j <= t; j++)         for (int(z) = 0; (z) < (int)(2); (z)++) {           if (a[i] * z + b[i] * j <= c[i] && f[i - 1][j][z] < (1LL << 60)) {             mintt(f[i][j][z], f[i - 1][j][z]);             long long cnt = (sa[i - 1] * z + sb[i - 1] * j + k - 1) / k;             if (cnt * k <= sa[i] * z + sb[i] * j) mintt(g[i][j][z], cnt);           }           for (int r = 0; r < j; r++) {             long long cnt = g[i][r][z];             if (cnt == (1LL << 60)) continue;             long long rem = sa[i] * z + sb[i] * r - cnt * k;             assert(0 <= rem);             long long need = (max(0LL, rem + b[i] * (j - r) - c[i]) + k - 1) / k;             if (need * k <= rem && f[i - 1][j - r][0] < (1LL << 60)) {               mintt(f[i][j][z], cnt + need + f[i - 1][j - r][0]);               long long n2 = (sb[i - 1] * (j - r) + k - 1) / k;               if (n2 * k <= sb[i] * (j - r) + rem - need * k) {                 mintt(g[i][j][z], cnt + need + n2);               }             }           }         }     }     printf( %lld n , f[n][t][1]);   }   int main() {     int t = 1;     for (int(i) = 1; (i) <= (int)(t); (i)++) {       fmain(i);     }     return 0;   }   