#include <bits/stdc++.h>
using namespace std;
void WA() {
  printf("-1\n");
  exit(0);
}
struct Friend {
  int mask, x, k;
  Friend() {}
};
bool operator<(Friend fr1, Friend fr2) { return fr1.k < fr2.k; }
Friend readFriend() {
  Friend fr;
  int m;
  scanf("%d%d%d", &fr.x, &fr.k, &m);
  fr.mask = 0;
  for (int i = 0; i < m; ++i) {
    int v;
    scanf("%d", &v);
    fr.mask += (1 << (v - 1));
  }
  return fr;
}
const long long INF = 2000000000000004000ll;
int n, m, b;
Friend frs[200];
long long d[1 << 20];
long long ans;
void updMin(long long &x, long long y) {
  if (x > y) x = y;
}
int main() {
  scanf("%d%d%d", &n, &m, &b);
  for (int i = 0; i < n; ++i) frs[i] = readFriend();
  sort(frs, frs + n);
  for (int i = 1; i < (1 << m); ++i) d[i] = INF;
  d[0] = 0;
  ans = INF;
  long long dop = 0;
  for (int i = 0; i < n; ++i) {
    dop = frs[i].k * (long long)b;
    if (dop >= ans) break;
    for (int j = 0; j < (1 << m); ++j)
      updMin(d[j | frs[i].mask], d[j] + frs[i].x);
    ans = min(ans, d[(1 << m) - 1] + dop);
  }
  if (ans == INF) ans = -1;
  cout << ans << "\n";
  return 0;
}
