#include <bits/stdc++.h>
inline unsigned long long read() {
  unsigned long long ans = 0;
  char last = ' ', ch = getchar();
  while (ch < '0' || ch > '9') last = ch, ch = getchar();
  while (ch >= '0' && ch <= '9')
    ans = (ans << 3) + (ans << 1) + ch - '0', ch = getchar();
  if (last == '-') ans = -ans;
  return ans;
}
const unsigned long long INF = 1e19;
const int N = 105;
unsigned long long n, m, b;
struct Friend {
  unsigned long long mon;
  unsigned long long nums;
  unsigned long long prob;
} p[N];
bool cmp(const Friend &a, const Friend &b) { return a.nums < b.nums; }
unsigned long long f[1 << 21];
unsigned long long ans = INF;
int main() {
  n = read(), m = read(), b = read();
  int num, x;
  for (int i = 0; i <= n - 1; ++i) {
    p[i].mon = read(), p[i].nums = read();
    num = read();
    for (int j = 1; j <= num; ++j) {
      x = read();
      p[i].prob |= 1 << (x - 1);
    }
  }
  std::sort(p, p + n, cmp);
  for (int i = 0; i < (1 << m); ++i) {
    f[i] = INF;
  }
  f[0] = 0;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < (1 << m); ++j) {
      if (f[j] == INF) continue;
      f[j | p[i].prob] =
          ((f[j | p[i].prob]) < (f[j] + p[i].mon) ? (f[j | p[i].prob])
                                                  : (f[j] + p[i].mon));
    }
    if (f[(1 << m) - 1] != INF)
      ans = ((ans) < (f[(1 << m) - 1] + p[i].nums * b)
                 ? (ans)
                 : (f[(1 << m) - 1] + p[i].nums * b));
  }
  if (ans != INF)
    printf("%I64d\n", ans);
  else
    printf("-1\n");
  return 0;
}
