#include <bits/stdc++.h>
using namespace std;
const int inf = INT_MAX;
const long long int INF = LLONG_MAX;
const long long int mod = 1e9 + 7;
int main() {
  ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  long long int n, m, b;
  cin >> n >> m >> b;
  vector<long long int> pow2(m);
  pow2[0] = 1;
  for (int i = 1; i <= m - 1; i++) pow2[i] = pow2[i - 1] * 2;
  vector<pair<long long int, pair<long long int, long long int> > > a(n);
  for (int i = 0; i <= n - 1; i++) {
    long long int xi, ki, mi;
    cin >> xi >> ki >> mi;
    long long int val = 0;
    for (int j = 0; j <= mi - 1; j++) {
      long long int temp;
      cin >> temp;
      val = val | pow2[temp - 1];
    }
    a[i] = make_pair(ki, make_pair(xi, val));
  }
  sort(a.begin(), a.end());
  long long int maxi = pow(2, m);
  long long int ans = INF;
  vector<long long int> cost(maxi, INF);
  for (int i = 0; i <= n - 1; i++) {
    for (long long int j = maxi - 1; j >= 1; j--) {
      if (cost[j] == INF) continue;
      long long int val = j | a[i].second.second;
      if (val > j) {
        long long int costi = cost[j] + a[i].second.first;
        cost[val] = min(cost[val], costi);
      }
    }
    long long int costi = a[i].second.first + a[i].first * b;
    cost[a[i].second.second] = min(cost[a[i].second.second], costi);
    ans = min(ans, cost[maxi - 1]);
    if (i != n - 1) {
      for (long long int j = 0; j <= maxi - 1; j++) {
        if (cost[j] == INF) continue;
        cost[j] = cost[j] + (a[i + 1].first - a[i].first) * b;
      }
    }
  }
  if (ans == INF)
    cout << "-1";
  else
    cout << ans;
  cerr << "Time : " << 1000 * ((double)clock()) / (double)CLOCKS_PER_SEC
       << "ms\n";
  return 0;
}
