#include <bits/stdc++.h>
using namespace std;
const int MAX = 1 << 20;
long long n, m, b;
vector<pair<int, pair<int, int>>> v;
int prob[101];
unsigned long long dp[MAX], dp2[MAX];
int main() {
  scanf("%lld%lld%lld", &n, &m, &b);
  for (int i = 0; i < n; i++) {
    int aa, bb, cc;
    scanf("%d%d%d", &aa, &bb, &cc);
    v.push_back({bb, {aa, i}});
    for (int j = 0; j < cc; j++) {
      int gg;
      scanf("%d", &gg);
      gg--;
      prob[i] = prob[i] | (1 << gg);
    }
  }
  sort(v.begin(), v.end());
  for (int i = 0; i < (1 << m); i++) dp[i] = dp2[i] = 1e19;
  dp[0] = dp2[0] = 0ll;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < (1 << m); j++) {
      dp2[j] = min(dp2[j], dp[j]);
      int mask = j | prob[v[i - 1].second.second];
      long long cst = 0;
      if (__builtin_popcount(mask) == m) cst = v[i - 1].first * b;
      dp2[mask] = min(dp2[mask], dp[j] + v[i - 1].second.first + cst);
    }
    for (int j = 0; j < (1 << m); j++) {
      dp[j] = dp2[j];
    }
  }
  if (dp[(1 << m) - 1] >= 1e19)
    puts("-1");
  else
    printf("%lld\n", dp[(1 << m) - 1]);
  return 0;
}
