func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T>   using V = vector<T>;   const long long int mod = 1000000007;   struct sb {     size_t c, ind;     unsigned long long int a, b;   };   bool cmp(sb a, sb b) { return a.c < b.c; }   struct s {     unsigned long long int sub;     size_t lastsub;     int before;     bool can;   } DP[51][101][51];   int main() {     ios_base::sync_with_stdio(false);     cin.tie(nullptr);     size_t N, M;     unsigned long long int K;     cin >> N >> M >> K;     V<sb> subs(M);     for (__typeof(M) i = (0) - ((0) > (M)); i != (M) - ((0) > (M));          i += ((0) > (M) ? -1 : 1))       cin >> subs[i].a >> subs[i].b >> subs[i].c, subs[i].ind = i;     sort((subs).begin(), (subs).end(), cmp);     pair<size_t, unsigned long long int> ans;     for (__typeof(M) i = (0) - ((0) > (M)); i != (M) - ((0) > (M));          i += ((0) > (M) ? -1 : 1)) {       for (__typeof(subs[i].b + 1) j =                (subs[i].a) - ((subs[i].a) > (subs[i].b + 1));            j != (subs[i].b + 1) - ((subs[i].a) > (subs[i].b + 1));            j += ((subs[i].a) > (subs[i].b + 1) ? -1 : 1)) {         size_t l = j - subs[i].a;         DP[i][l][1].sub = j;         DP[i][l][1].lastsub = 0;         DP[i][l][1].before = -1;         DP[i][l][1].can = true;         for (__typeof(N + 1) k = (2) - ((2) > (N + 1));              k != (N + 1) - ((2) > (N + 1)); k += ((2) > (N + 1) ? -1 : 1)) {           DP[i][l][k].sub = 0;           DP[i][l][k].lastsub = 0;           DP[i][l][k].before = -1;           DP[i][l][k].can = false;           for (__typeof(0) z = (i) - ((i) > (0)); z != (0) - ((i) > (0));                z += ((i) > (0) ? -1 : 1)) {             if (subs[z].c == subs[i].c) continue;             if (j % K == 0 && j / K >= subs[z].a &&                 (j / K - subs[z].a) <= subs[z].b - subs[z].a) {               if (DP[z][j / K - subs[z].a][k - 1].can &&                   DP[z][j / K - subs[z].a][k - 1].sub + j >= DP[i][l][k].sub) {                 DP[i][l][k].sub = DP[z][j / K - subs[z].a][k - 1].sub + j;                 DP[i][l][k].lastsub = j / K - subs[z].a;                 DP[i][l][k].can = true;                 DP[i][l][k].before = z;               }             }             if (j >= K + subs[z].a &&                 (j - K - subs[z].a) <= subs[z].b - subs[z].a) {               if (DP[z][j - K - subs[z].a][k - 1].can &&                   DP[z][j - K - subs[z].a][k - 1].sub + j >= DP[i][l][k].sub) {                 DP[i][l][k].sub = DP[z][j - K - subs[z].a][k - 1].sub + j;                 DP[i][l][k].lastsub = j - K - subs[z].a;                 DP[i][l][k].can = true;                 DP[i][l][k].before = z;               }             }           }         }         if (DP[i][l][N].can &&             DP[i][l][N].sub >= DP[ans.first][ans.second][N].sub)           ans = {i, l};       }     }     if (!DP[ans.first][ans.second][N].can) {       cout <<  NO  << endl;       return 0;     }     cout <<  YES  << endl;     V<pair<size_t, unsigned long long int> > res;     for (__typeof(1) i = (N + 1) - ((N + 1) > (1)); i != (1) - ((N + 1) > (1));          i += ((N + 1) > (1) ? -1 : 1)) {       res.push_back({subs[ans.first].ind + 1, subs[ans.first].a + ans.second});       ans = {DP[ans.first][ans.second][i].before,              DP[ans.first][ans.second][i].lastsub};     }     for (__typeof(0) i = (N) - ((N) > (0)); i != (0) - ((N) > (0));          i += ((N) > (0) ? -1 : 1))       cout << res[i].first <<     << res[i].second << endl;     return 0;   }   