#include <bits/stdc++.h>
using namespace std;
unsigned long long inf = 1e19;
int read() {
  int x = 0;
  char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  return x;
}
struct node {
  unsigned long long x, k;
  int sov;
} a[105];
bool cmp(node x, node y) { return x.k < y.k; }
int n, m;
unsigned long long g[1 << 20], b;
void cl(unsigned long long f[1 << 20]) {
  for (int i = 0; i < (1 << m); ++i) f[i] = inf;
}
int main() {
  register int i, j, S;
  n = read(), m = read(), b = read();
  for (i = 1; i <= n; ++i) {
    a[i].x = read(), a[i].k = read();
    int o = read();
    for (j = 1; j <= o; ++j) {
      int x = read();
      a[i].sov |= 1 << x - 1;
    }
  }
  sort(a + 1, a + 1 + n, cmp);
  unsigned long long ans = inf;
  cl(g);
  g[0] = 0;
  for (i = 1; i <= n; ++i) {
    for (S = 0; S < (1 << m); ++S)
      if (g[S] != inf)
        if (g[S] + a[i].x < g[S | a[i].sov]) g[S | a[i].sov] = g[S] + a[i].x;
    if (g[(1 << m) - 1] + b * a[i].k < ans) ans = g[(1 << m) - 1] + b * a[i].k;
  }
  if (ans == inf)
    cout << -1;
  else
    cout << ans;
  return 0;
}
