#include <bits/stdc++.h>   using namespace std;   #pragma comment(linker,  /STACK:256000000 )   template <class T>   T sqr(T a) {     return a * a;   }   int n, m, b;   long long a[1 << 20];   int was[1 << 20];   struct dr {     int mon, pl, zad;     int mask;     const bool operator<(dr a) const {       if (mon < a.mon)         return true;       else         return false;     }   };   dr fr[100];   void init() {     scanf( %d%D%D , &n, &m, &b);     for (int i = 0; i < n; ++i) {       scanf( %d%d%D , &fr[i].pl, &fr[i].mon, &fr[i].zad);       for (int j = 0; j < fr[i].zad; ++j) {         int t;         scanf( %D , &t);         t--;         fr[i].mask |= 1 << t;       }     }     sort(fr, fr + n);   }   int q = 0;   long long ot = -1, ma = 1e18, co;   void solve() {     was[0] = 1;     for (int i = 0; i < (1 << m); ++i) a[i] = 1e18;     a[0] = 0;     for (int i = 0; i < n; ++i) {       co = fr[i].mon;       int t = fr[i].mask;       for (int j = (1 << m) - 1; j >= 0; --j) {         if (!was[j]) continue;         was[j | t] = 1;         a[j | t] = min(a[j | t], a[j] + fr[i].pl);       }       if (!was[(1 << m) - 1]) continue;       if (ot == -1)         ot = a[(1 << m) - 1] + co * (long long)b;       else         ot = min(ot, a[(1 << m) - 1] + co * (long long)b);     }     cout << ot;   }   int main() {     init();     solve();     return 0;   }   