#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.);
const long long mod = 1000000007;
inline void prep() {
  cin.tie(0);
  cin.sync_with_stdio(0);
};
long long n, m, b;
long long costt(pair<long long, long long> p) { return p.first * b + p.second; }
int probs[100];
long long costs[100];
long long monitors[100];
const int high = (1 << 20);
long long memo[high];
int lim;
int main() {
  prep();
  cin >> n >> m >> b;
  vector<pair<long long, pair<long long, long long> > > ppl;
  for (int i = 0; i < n; i++) {
    cin >> costs[i];
    cin >> monitors[i];
    int p;
    cin >> p;
    bitset<20> number(0);
    for (int j = 0; j < p; j++) {
      int num;
      cin >> num;
      number[num - 1] = 1;
    }
    probs[i] = (int)number.to_ulong();
    ppl.push_back({monitors[i], {costs[i], probs[i]}});
  }
  sort(ppl.begin(), ppl.end());
  for (int i = 0; i < n; i++) {
    int temp = ppl[i].second.first;
    ppl[i].second.first = ppl[i].first;
    ppl[i].first = temp;
  }
  int full = 0;
  for (int i = 0; i < n; i++) {
    full = full | ppl[i].second.second;
  }
  lim = (1 << m) - 1;
  if (full != lim) {
    cout << -1;
    return 0;
  }
  for (int i = 0; i <= lim; i++) {
    if ((i | ppl[n - 1].second.second) != lim) {
      memo[i] = 2000000000000000000;
    } else {
      memo[i] = ppl[n - 1].second.first * b + ppl[n - 1].first;
    }
  }
  for (int i = n - 2; i >= 0; i--) {
    for (int j = 0; j <= lim; j++) {
      if ((j | ppl[i].second.second) == lim) {
        long long calc1 = memo[j];
        long long calc2 = ppl[i].second.first * b + ppl[i].first;
        if (calc1 > calc2) {
          memo[j] = calc2;
        }
      } else {
        int orr = j | ppl[i].second.second;
        long long calc1 = memo[j];
        long long calc2 = memo[orr] + ppl[i].first;
        if (calc1 > calc2) {
          memo[j] = calc2;
        }
      }
    }
  }
  cout << memo[0];
  return 0;
}
