#include <bits/stdc++.h>
using namespace std;
const long long LINF = 1e17 + 7;
const unsigned long long BASE = 33;
const int N = 1e2 + 7;
const int INF = 1e9 + 7;
const int MOD = 10003;
const double Pi = acos(-1.);
const double EPS = 1e-8;
const int P = 1e9 + 9;
long long kpow(long long a, long long b) {
  long long ret = 1;
  for (; b; b >>= 1, a = a * a % P)
    if (b & 1) ret = ret * a % P;
  return ret;
}
struct Node {
  int x, k, sov;
  bool operator<(const Node &p) const { return k < p.k; }
} a[N];
int n, m, xm, b;
long long f[2][(1 << 20) + 7];
inline void upd(long long &x, long long y) {
  if (x == -1 || x > y) x = y;
}
int main() {
  scanf("%d%d%d", &n, &m, &b);
  for (int i = 0; i < (n); ++i) {
    int t;
    scanf("%d%d%d", &a[i].x, &a[i].k, &t);
    for (int j = 0; j < (t); ++j) {
      int x;
      scanf("%d", &x);
      a[i].sov |= (1 << (x - 1));
    }
  }
  sort(a, a + n);
  long long ans = -1;
  xm = 1 << m;
  int t = 0;
  for (int i = 0; i < (xm); ++i) f[t][i] = -1;
  f[t][0] = 0;
  for (int i = 0; i < (n); ++i) {
    for (int mask = 0; mask < (xm); ++mask) f[t ^ 1][mask] = -1;
    for (int mask = 0; mask < (xm); ++mask)
      if (~f[t][mask]) {
        upd(f[t ^ 1][mask], f[t][mask]);
        upd(f[t ^ 1][mask | a[i].sov], f[t][mask] + a[i].x);
      }
    t ^= 1;
    if (~f[t][xm - 1]) upd(ans, f[t][xm - 1] + (long long)b * a[i].k);
  }
  printf("%lld", ans);
  return 0;
}
