func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, k;   struct Lesson {     long long a, b;     int c, id;     bool operator<(const Lesson &t) const { return c < t.c; }   } ls[55];   int fstc[110];   long long dp[55][55][110];   pair<int, int> trans[55][55][110];   inline void upd(int x1, int y1, int z1, int y2, int z2, long long val) {     if (dp[x1][y1][z1] < val) {       dp[x1][y1][z1] = val;       trans[x1][y1][z1] = make_pair(y2, z2);     }   }   void Print(int lvl, int od, int ad) {     if (lvl == 0) {       printf( %d %I64d n , ls[od].id, ls[od].a + ad);       return;     }     Print(lvl - 1, trans[lvl][od][ad].first, trans[lvl][od][ad].second);     printf( %d %lld n , ls[od].id, ls[od].a + ad);   }   int main() {     scanf( %d%d%d , &n, &m, &k);     for (int i = 0; i < m; i++) {       scanf( %I64d%I64d%d , &ls[i].a, &ls[i].b, &ls[i].c);       ls[i].id = i + 1;     }     sort(ls, ls + m);     memset(fstc, -1, sizeof(fstc));     for (int i = 0; i < m; i++)       if (fstc[ls[i].c] == -1) fstc[ls[i].c] = i;     for (int i = 0; i < m; i++) {       for (int j = 0; j <= (int)(ls[i].b - ls[i].a); j++) {         dp[0][i][j] = (ls[i].a + j);       }     }     for (int i = 1; i < n; i++) {       for (int j = 0; j < m; j++) {         int c = ls[j].c;         for (int task = 0; task <= 100; task++)           if (dp[i - 1][j][task]) {             long long val = ls[j].a + task;             if (val > ls[j].b) continue;             long long knval = val * 1ll * k;             long long nvalk = val + 1ll * k;             for (int nc = c + 1; nc <= 100; nc++) {               if (fstc[nc] == -1) continue;               for (int nj = fstc[nc]; nj < m && ls[nj].c == nc; nj++) {                 if (ls[nj].a <= knval && knval <= ls[nj].b) {                   int ntask = (int)(knval - ls[nj].a);                   upd(i, nj, ntask, j, task, dp[i - 1][j][task] + knval);                 }                 if (ls[nj].a <= nvalk && nvalk <= ls[nj].b) {                   int ntask = (int)(nvalk - ls[nj].a);                   upd(i, nj, ntask, j, task, dp[i - 1][j][task] + nvalk);                 }               }             }           }       }     }     long long ans = 0;     int y = -1, z = -1;     for (int i = 0; i < m; i++)       for (int j = 0; j <= (int)(ls[i].b - ls[i].a); j++) {         if (dp[n - 1][i][j] > ans) {           ans = dp[n - 1][i][j];           y = i;           z = j;         }       }     if (ans == 0 || y == -1 || z == -1) {       printf( NO n );       return 0;     }     printf( YES n );     Print(n - 1, y, z);     return 0;   }   