#include <bits/stdc++.h>
using namespace std;
const unsigned long long inf = 1e19;
const int maxn = 110;
unsigned long long n, m, b;
struct Frd {
  unsigned long long x, k, prob;
} Frds[maxn];
unsigned long long dp[(1 << 20) + 10];
inline bool cmp(const Frd &_a, const Frd &_b) { return _a.k < _b.k; }
int main() {
  scanf("%lld%lld%lld", &n, &m, &b);
  for (int i = 0; i < maxn; i++) Frds[i].prob = 0;
  for (int i = 1; i <= n; i++) {
    int mm;
    scanf("%lld%lld%d", &Frds[i].x, &Frds[i].k, &mm);
    for (int j = 0; j < mm; j++) {
      int pid;
      scanf("%d", &pid);
      Frds[i].prob |= (1 << (pid - 1));
    }
  }
  sort(Frds + 1, Frds + 1 + n, cmp);
  for (int i = 0; i < 1048586; i++) dp[i] = inf;
  dp[0] = 0;
  unsigned long long dpans = inf;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < (1 << m); j++) {
      if (dp[j] == inf) continue;
      dp[j | Frds[i].prob] = min(1ll * dp[j | Frds[i].prob], dp[j] + Frds[i].x);
    }
    if (dp[(1 << m) - 1] != inf)
      dpans = min(1ll * dpans, dp[(1 << m) - 1] + Frds[i].k * b);
  }
  unsigned long long ans;
  if (dpans == inf)
    ans = -1;
  else
    ans = dpans;
  printf("%lld", ans);
  return 0;
}
