#include <bits/stdc++.h>
using namespace std;
struct Sfriend {
  long long x, k, m;
};
long long a[30];
long long mat[111];
Sfriend fr[111];
long long ans[1111111];
void qsort(int left, int right) {
  int i = left, j = right, e;
  Sfriend t;
  e = fr[rand() % (j - i + 1) + i].k;
  while (i < j) {
    while (fr[i].k < e) i++;
    while (fr[j].k > e) j--;
    if (i <= j) {
      t = fr[i];
      fr[i] = fr[j];
      fr[j] = t;
      i++;
      j--;
    }
  }
  if (i < right) qsort(i, right);
  if (left < j) qsort(left, j);
};
void solution() {
  long long n, m, b, FN = 1;
  cin >> n >> m >> b;
  memset(mat, 0, sizeof(mat));
  for (int i = (1); i <= (m); i++) {
    a[i] = FN;
    FN *= 2;
  }
  FN--;
  long long temp = 0;
  for (int i = (1); i <= (n); i++) {
    long long mi;
    cin >> fr[i].x >> fr[i].k >> mi;
    for (int j = (1); j <= (mi); j++) {
      int z;
      cin >> z;
      mat[i] |= a[z];
    }
    fr[i].m = mat[i];
    temp |= mat[i];
  }
  if (temp != FN) {
    printf("-1\n");
    return;
  }
  qsort(1, n);
  long long res = 6e18;
  for (int i = (1); i <= (FN); i++) ans[i] = 6e18;
  ans[0] = 0;
  for (int i = (1); i <= (n); i++) {
    for (int j = (0); j <= (FN); j++) {
      if (ans[j] + fr[i].x < ans[j | fr[i].m])
        ans[j | fr[i].m] = ans[j] + fr[i].x;
    }
    if (ans[FN] + fr[i].k * b < res) res = ans[FN] + fr[i].k * b;
  }
  cout << res << endl;
};
int main() { solution(); }
