#include <bits/stdc++.h>
using namespace std;
struct Friend {
  long long x, k;
  int mask;
  bool operator<(const Friend &a) const { return (k > a.k); }
};
Friend f[108];
long long price[1048576] = {0}, b;
int n, m, maskNum, i, bit[20], N, j, newMask, pr;
bool mark[1048576] = {0};
inline void ucitaj() {
  scanf("%d %d %I64d", &n, &m, &b);
  maskNum = 1 << m;
  for (i = 0; i < m; i++) bit[i] = 1 << i;
  for (i = 1; i <= n; i++) {
    scanf("%I64d %I64d %d", &f[i].x, &f[i].k, &N);
    f[i].mask = 0;
    for (j = 1; j <= N; j++) {
      scanf("%d", &pr);
      f[i].mask += bit[pr - 1];
    }
  }
}
inline void resi() {
  for (i = 1; i <= n; i++) {
    for (j = 0; j < maskNum; j++) {
      if (mark[j]) {
        newMask = j | f[i].mask;
        if (!mark[newMask] || price[newMask] > price[j] + f[i].x) {
          price[newMask] = price[j] + f[i].x;
          mark[newMask] = 1;
        }
      }
    }
    if (!mark[f[i].mask] || price[f[i].mask] > f[i].x + b * f[i].k) {
      price[f[i].mask] = f[i].x + b * f[i].k;
      mark[f[i].mask] = 1;
    }
  }
}
int main() {
  ucitaj();
  sort(f + 1, f + n + 1);
  resi();
  if (price[maskNum - 1])
    printf("%I64d\n", price[maskNum - 1]);
  else
    printf("-1\n");
  return 0;
}
