#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:256000000")
using namespace std;
const double infd = 2e+9;
const int infi = 1ll << 30;
const long long infl = 1ll << 60;
template <class T>
inline T sqr(T x) {
  return x * x;
}
struct item {
  item() {}
  item(int x, int k, unsigned m) {
    cost = x;
    monitors = k;
    mask = m;
  }
  int cost, monitors;
  unsigned mask;
};
bool operator<(item a, item b) { return a.monitors < b.monitors; }
int main() {
  int n, m, b;
  cin >> n >> m >> b;
  vector<item> v(n);
  for (int i = 0; i < n; i++) {
    int x, k, m;
    unsigned mask = 0;
    cin >> x >> k >> m;
    for (int i = 0; i < m; i++) {
      int val;
      cin >> val;
      mask |= (1u << (val - 1));
    }
    v[i] = item(x, k, mask);
  }
  sort(v.begin(), v.end());
  unsigned max_mask = 1u << m;
  vector<long long> d(max_mask, infl);
  d[0] = 0;
  long long result = infl;
  for (int i = 0; i < n; i++) {
    for (unsigned mask = 0; mask < max_mask; mask++) {
      unsigned x = ((~v[i].mask) & mask) & (max_mask - 1);
      d[mask] = min(d[mask], d[x] + v[i].cost);
    }
    result = min(result, d[max_mask - 1] + b * 1ll * v[i].monitors);
  }
  cout << (result == infl ? -1 : result);
  return 0;
}
