#include <bits/stdc++.h>
using namespace std;
long long dp[1 << 20];
struct friends {
  int x, k, mask;
  friends() {}
  friends(int a, int b, int c) : x(a), k(b), mask(c) {}
  bool operator<(const friends &arg) const {
    return k < arg.k || (k == arg.k && x < arg.x);
  }
};
int main() {
  memset(dp, 63, sizeof(dp));
  long long inf = dp[0];
  dp[0] = 0;
  int n, m, b;
  scanf("%d%d%d", &n, &m, &b);
  friends mf[n];
  for (int i = 0; i < n; ++i) {
    int x, k, p;
    int mask = 0;
    scanf("%d%d%d", &x, &k, &p);
    for (int j = 0; j < p; ++j) {
      int cp;
      scanf("%d", &cp);
      mask |= 1 << (cp - 1);
    }
    mf[i] = friends(x, k, mask);
  }
  sort(mf, mf + n);
  long long ret = inf;
  for (int i = 0; i < n; ++i) {
    long long cost = mf[i].x;
    for (int j = 0; j < 1 << m; ++j) {
      int tm = j & (~mf[i].mask);
      if (dp[tm] >= inf) continue;
      if (dp[j] > dp[tm] + cost) dp[j] = dp[tm] + cost;
      if (dp[(1 << m) - 1] < inf) {
        if (ret > dp[(1 << m) - 1] + (long long)mf[i].k * b)
          ret = dp[(1 << m) - 1] + (long long)mf[i].k * b;
      }
    }
  }
  if (ret < inf)
    printf("%I64d", ret);
  else
    printf("-1");
  return 0;
}
