#include <bits/stdc++.h>
using namespace std;
int n, m;
long long b;
const int L = (1 << 20) + 2;
long long f[L + 1];
struct node {
  int cost, large, cover;
} x[105];
bool cmp(node u, node v) { return u.large < v.large; }
void minimize(long long &v, long long u) {
  if (v > u) v = u;
}
int main() {
  scanf("%d%d%I64d", &n, &m, &b);
  for (int i = 1, t, y; i <= n; i++) {
    scanf("%d%d%d", &x[i].cost, &x[i].large, &t);
    for (int j = 1; j <= t; j++) {
      scanf("%d", &y);
      x[i].cover |= 1 << (y - 1);
    }
  }
  sort(x + 1, x + n + 1, cmp);
  memset(f, 127, sizeof(f));
  long long ans = f[L];
  f[0] = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < (1 << m); j++)
      if (f[j] != f[L]) minimize(f[j | x[i].cover], f[j] + x[i].cost);
    if (f[(1 << m) - 1] != f[L])
      minimize(ans, f[(1 << m) - 1] + b * x[i].large);
  }
  if (ans == f[L])
    printf("-1\n");
  else
    printf("%I64d\n", ans);
}
