#include <bits/stdc++.h>
using namespace std;
vector<pair<int, pair<int, int> > > v;
const int maxN = (1 << 20) + 100;
const long long inf = 2e18;
int n, m, b;
long long dp[maxN];
long long ans = 2e18;
int vis[maxN] = {-1};
inline int gt() {
  int x;
  cin >> x;
  int cur = 0;
  for (int(i) = (0); (i) < (int)(x); ++(i)) {
    int c;
    cin >> c;
    c--;
    cur |= (1 << c);
  }
  return cur;
}
void InIt() {
  cin >> n >> m >> b;
  for (int i = 0; i < n; i++) {
    int x, k;
    cin >> x >> k;
    int d = gt();
    v.push_back(make_pair(k, make_pair(x, d)));
  }
}
inline void add(int ind, int pos) {
  int nxt = v[ind].second.second | pos;
  if (nxt != pos and dp[nxt] < inf and vis[nxt] != ind) add(ind, nxt);
  vis[nxt] = ind;
  dp[nxt] = min(dp[nxt], (long long)v[ind].second.first + dp[pos]);
}
long long Solve() {
  sort(v.begin(), v.end());
  for (int i = 0; i < (1 << m); i++) dp[i] = inf;
  dp[0] = 0;
  for (int(i) = (0); (i) < (int)(n); ++(i)) {
    for (int(j) = (0); (j) < (int)((1 << m)); ++(j)) {
      if (vis[j] != i and dp[j] < inf) add(i, j);
    }
    ans = min(ans, dp[(1 << m) - 1] + (long long)b * (long long)v[i].first);
  }
  return (ans < inf) ? ans : -1;
}
int main() {
  ios_base::sync_with_stdio(false);
  InIt();
  cout << Solve() << endl;
  return 0;
}
