#include <bits/stdc++.h>
using namespace std;
struct node {
  long long int val, mo, nro1, bits;
  bool operator<(node p) const { return mo < p.mo; }
} arr[101];
long long int n, m, b;
long long int DP[(1 << 20)];
int main() {
  long long int ma, x;
  scanf("%I64d %I64d %I64d", &n, &m, &b);
  for (int i = 0; i < n; i++) {
    ma = 0;
    scanf("%I64d %I64d %I64d", &arr[i].val, &arr[i].mo, &arr[i].nro1);
    for (int j = 0; j < arr[i].nro1; j++) {
      scanf("%I64d", &x);
      ma |= (1 << (x - 1));
    }
    arr[i].bits = ma;
  }
  sort(arr, arr + n);
  DP[0] = 0;
  for (int i = 1; i < (1 << m); i++) DP[i] = (((1LL << 61) - 1) << 1) + 1;
  long long int sol = (((1LL << 61) - 1) << 1) + 1;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < (1 << m); j++)
      DP[j | arr[i].bits] = min(DP[j | arr[i].bits], DP[j] + arr[i].val);
    sol = min(sol, DP[(1 << m) - 1] + arr[i].mo * b);
  }
  printf("%I64d\n", (sol >= (((1LL << 61) - 1) << 1) + 1) ? -1 : sol);
  return 0;
}
