func_code_string: #include <bits/stdc++.h>   const int N = 254;   const long long INF = 0x3f3f3f3f3f3f3f3fll;   int n, t, K;   int a[N], d[N];   long long A[N], D[N], lim[N];   long long f[N][N][2], g[N][N][2];   inline void down(long long &x, const long long y) { x > y ? x = y : 0; }   inline long long max(const long long x, const long long y) {     return x < y ? y : x;   }   int main() {     int i, j, k, r;     long long times, time2, rem, need;     scanf( %d%d%d , &n, &t, &K);     for (i = 1; i <= n; ++i) scanf( %d%d%lld , a + i, d + i, lim + i);     ++n, a[n] = d[n] = INT_MAX, lim[n] = INF;     for (i = 1; i <= n; ++i) A[i] = A[i - 1] + a[i], D[i] = D[i - 1] + d[i];     memset(f, 63, sizeof f), memset(g, 63, sizeof g);     memset(f, 0, sizeof *f), memset(g, 0, sizeof *g);     for (i = 1; i <= n; ++i)       for (j = 0; j <= t; ++j)         for (k = 0; k < 2; ++k) {           if ((long long)k * a[i] + (long long)j * d[i] <= lim[i] &&               f[i - 1][j][k] < INF) {             down(f[i][j][k], f[i - 1][j][k]),                 times = (k * A[i - 1] + j * D[i - 1] + K - 1) / K;             if (times * K <= k * A[i] + j * D[i]) down(g[i][j][k], times);           }           for (r = 0; r < j; ++r)             if ((times = g[i][r][k]) < INF) {               rem = k * A[i] + r * D[i] - K * times, assert(rem >= 0);               need =                   (max(0, rem + (long long)(j - r) * d[i] - lim[i]) + K - 1) / K;               if (need * K <= rem && f[i - 1][j - r][0] < INF) {                 down(f[i][j][k], times + need + f[i - 1][j - r][0]);                 time2 = ((j - r) * D[i - 1] + K - 1) / K;                 if (time2 * K <= (j - r) * D[i] + (rem - need * K))                   down(g[i][j][k], times + need + time2);               }             }         }     printf( %lld n , f[n][t][1]);     return 0;   }   