func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = (1 << 20) + 15;   long long dp[N];   pair<int, int> id[100];   int bit[100], c[100], st[N];   int main() {     int u, a, mi, n, m, i, j, b, x, p = 0, idd;     long long k, temp;     long long ret = 4e18;     scanf( %d%d%d , &n, &m, &b);     for (i = 0; i < n; ++i) {       scanf( %d%d%d , &c[i], &id[i].first, &mi);       a = 0;       for (j = 0; j < mi; ++j) scanf( %d , &u), a |= 1 << (u - 1);       bit[i] = a;       id[i].second = i;     }     memset(dp, -1, sizeof(dp));     sort(id, id + n);     dp[0] = 0;     ++p;     for (i = 0; i < n; ++i) {       k = id[i].first, idd = id[i].second;       if (dp[bit[idd]] != -1 && dp[bit[idd]] <= c[idd]) continue;       x = p;       for (j = 0; j < p; ++j) {         u = st[j] | bit[idd];         if (dp[u] == -1 && u != (1 << m) - 1) st[x++] = u;         if (dp[u] == -1 || dp[u] > dp[st[j]] + c[idd]) dp[u] = dp[st[j]] + c[idd];       }       if (dp[(1 << m) - 1] != -1) ret = min(ret, k * b + dp[(1 << m) - 1]);       p = x;     }     if (ret == 4e18) ret = -1;     cout << ret << endl;   }   