#include <bits/stdc++.h>
using namespace std;
int n, m, mon_cost;
vector<tuple<int, int, int>> friends;
const long long oo = 1LL << 60;
void solve() {
  cin >> n >> m >> mon_cost;
  friends.resize(n);
  for (int i = 0; i < n; ++i) {
    int x, k, num;
    cin >> x >> k >> num;
    int mask = 0;
    for (int j = 0; j < num; ++j) {
      int y;
      cin >> y;
      y--;
      mask = mask | (1 << y);
    }
    friends[i] = tie(x, k, mask);
  }
  sort(friends.begin(), friends.end(),
       [](tuple<int, int, int> lhs, tuple<int, int, int> rhs) {
         return get<1>(lhs) < get<1>(rhs);
       });
  vector<vector<long long>> dp(2, vector<long long>(1 << m, oo));
  int x, k, tasks;
  tie(x, k, tasks) = friends[0];
  dp[1][0] = 0;
  dp[1][tasks] = x;
  long long ans = oo;
  for (int i = 0; i < n; ++i) {
    int cur = i % 2;
    int prev = cur ^ 1;
    dp[cur].assign(1 << m, oo);
    tie(x, k, tasks) = friends[i];
    for (int mask = 0; mask < (1 << m); ++mask) {
      dp[cur][mask | tasks] = min(dp[cur][mask | tasks], dp[prev][mask] + x);
      dp[cur][mask] = min(dp[cur][mask], dp[prev][mask]);
    }
    long long val = dp[cur][(1 << m) - 1] + 1LL * k * mon_cost;
    ans = min(ans, val);
  }
  if (ans < oo) {
    cout << ans << '\n';
  } else {
    cout << -1 << '\n';
  }
}
int main() { solve(); }
