#include <bits/stdc++.h>
using namespace std;
const unsigned long long N = 105, M = 21;
unsigned long long n, m, v, x, now, tot, max_statue, inf, ans;
unsigned long long add[N], f[1 << M];
struct number {
  unsigned long long c, need, add;
} num[N];
inline bool cmp(number a, number b) { return a.need < b.need; }
signed main() {
  scanf("%lld%lld%lld", &n, &m, &v);
  for (register unsigned long long i = 1; i <= n; ++i) {
    scanf("%lld%lld%lld", &num[i].c, &num[i].need, &x);
    while (x--) {
      scanf("%lld", &now);
      num[i].add |= 1ll << (now - 1);
    }
  }
  sort(num + 1, num + n + 1, cmp);
  ans = -1;
  max_statue = (1ll << m) - 1;
  for (register unsigned long long p = 0; p <= max_statue; ++p) f[p] = 1e19;
  inf = f[0];
  f[0] = 0;
  for (register unsigned long long i = 1; i <= n; ++i) {
    for (register unsigned long long p = 0; p < max_statue; ++p)
      f[p | num[i].add] = min(f[p | num[i].add], f[p] + num[i].c);
    if (f[max_statue] != inf) {
      if (ans == -1ll)
        ans = f[max_statue] + num[i].need * v;
      else
        ans = min(ans, f[max_statue] + num[i].need * v);
    }
  }
  printf("%lld\n", ans);
  return 0;
}
