func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, b;   struct chel {     int cost;     int mas;     int coun;   };   chel f[103];   chel tem[103];   void mergesort(chel *a, chel *b, int n) {     int i, i0, i1, iRight, iEnd, width, j;     for (width = 1; width < n; width *= 2)       for (i = 0; i < n; i += width * 2) {         i0 = i;         i1 = iRight = min(i + width, n);         iEnd = min(i + width * 2, n);         for (j = i; j < iEnd; j++)           if (i0 < iRight && (i1 == iEnd || a[i0].coun < a[i1].coun))             b[j] = a[i0++];           else             b[j] = a[i1++];         for (j = i; j < iEnd; j++) a[j] = b[j];       }   }   long long dp[(1 << 20)];   int main() {     int i, j;     scanf( %d %d %d , &n, &m, &b);     dp[0] = 0;     for (i = 1; i < (1 << m); i++) dp[i] = (long long)1000000000 * 1000000000 * 2;     long long ans = (long long)1000000000 * 1000000000 * 2;     int x, t;     for (i = 0; i < n; i++) {       scanf( %d %d %d , &f[i].cost, &f[i].coun, &t);       for (j = 0; j < t; j++) {         scanf( %d , &x);         f[i].mas |= (1 << (x - 1));       }     }     mergesort(f, tem, n);     for (i = 0; i < n; i++) {       for (j = 0; j < (1 << m); j++)         dp[(j | f[i].mas)] = min(dp[(j | f[i].mas)], dp[j] + f[i].cost);       ans = min(ans, dp[(1 << m) - 1] + (long long)b * f[i].coun);     }     if (ans == (long long)1000000000 * 1000000000 * 2)       printf( -1 n );     else       printf( %I64d n , ans);     return 0;   }   