#include <bits/stdc++.h>
using namespace std;
const unsigned long long N = 110, M = (1 << 20) + 10, INF = 9187201950435737471;
inline long long read() {
  unsigned long long z = 0, x = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') x = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') z = z * 10 + c - '0', c = getchar();
  return z * x;
}
unsigned long long n, m, b, num, x;
unsigned long long dp[M], ans = INF;
struct qwe {
  unsigned long long x, k, xz;
} a[N];
bool cmp(qwe a, qwe b) { return a.k < b.k; }
int main() {
  n = read(), m = read(), b = read();
  for (register long long q1 = 1; q1 <= n; q1++) {
    a[q1].x = read(), a[q1].k = read(), num = read();
    for (register long long q2 = 1; q2 <= num; q2++)
      x = read(), a[q1].xz |= (1ll << (x - 1));
  }
  sort(a + 1, a + n + 1, cmp);
  memset(dp, 0x7f, sizeof(dp)), dp[0] = 0;
  for (register long long q2 = 1; q2 <= n; q2++) {
    for (register long long q1 = 0; q1 < (1ll << m); q1++)
      if (dp[q1] != INF)
        dp[q1 | a[q2].xz] = min(dp[q1 | a[q2].xz], dp[q1] + a[q2].x);
    ans = min(ans, dp[(1ll << m) - 1] + a[q2].k * b);
  }
  if (ans == INF) ans = -1ll;
  printf("%lld\n", ans);
  return 0;
}
