func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize( Ofast )   #pragma GCC optimize( unroll-loops )   #pragma GCC target( sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native )   using namespace std;   const int MOD = 1e9 + 7;   const int MOD2 = 1e9 + 9;   const int PR = 727;   const int INF = INT_MAX;   const long long LINF = LLONG_MAX;   struct node {     int x;     int k;     int m;   };   const int N = 1e2 + 20;   const int M = 21;   long long dp[1 << M], n, m, b, ans = LINF;   node a[N];   bool cmp(node x, node y) { return x.k < y.k; }   int main() {     ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);     cin >> n >> m >> b;     for (int i = 0, mi; i < n; i++) {       cin >> a[i].x >> a[i].k >> mi;       for (int j = 0, x; j < mi; j++) {         cin >> x;         a[i].m += (1 << (x - 1));       }     }     sort(a, a + n, cmp);     memset(dp, 63, sizeof dp);     dp[0] = 0;     for (int i = 0; i < n; i++) {       for (int mask = 1; mask < (1 << m); mask++)         if (mask & a[i].m)           dp[mask] = min(dp[mask], dp[mask ^ (mask & a[i].m)] + a[i].x);       ans = min(ans, (dp[(1 << m) - 1] == dp[(1 << M) - 1]                           ? LINF                           : dp[(1 << m) - 1] + a[i].k * b));     }     cout << (ans == LINF ? -1 : ans) << endl;   }   