#include <bits/stdc++.h>
struct Friend {
  int money, monitor, pbitmask;
};
int f, n, lim;
struct Friend ar[101];
long long int b, fuck[101], dp[2][1 << 20];
int compare(const void* a, const void* b) {
  struct Friend x = (*(struct Friend*)a);
  struct Friend y = (*(struct Friend*)b);
  return (y.monitor - x.monitor);
}
long long int F(int i, int bitmask) {
  if (i == f) {
    if (bitmask == lim)
      return 0;
    else
      return ((1LL << 62) - 50);
  }
  if (dp[i][bitmask] != -1) return dp[i][bitmask];
  long long int res = F(i + 1, bitmask);
  long long int x = F(i + 1, bitmask | ar[i].pbitmask) + ar[i].money;
  if (x < res) res = x;
  return (dp[i][bitmask] = res);
}
void Pregenerate() {
  int i, bitmask;
  for (i = f; i >= 0; i--) {
    for (bitmask = 0; bitmask <= lim; bitmask++) {
      if (i == f) {
        if (bitmask == lim)
          dp[i & 1][bitmask] = 0;
        else
          dp[i & 1][bitmask] = ((1LL << 62) - 50);
      } else {
        long long int res = dp[(i + 1) & 1][bitmask];
        long long int x =
            dp[(i + 1) & 1][bitmask | ar[i].pbitmask] + ar[i].money;
        if (x < res) res = x;
        dp[i & 1][bitmask] = res;
        if (bitmask == ar[i].pbitmask) fuck[i] = res;
      }
    }
  }
}
int main() {
  int i, j, bitmask, m, x;
  while (scanf("%d %d %I64d", &f, &n, &b) != EOF) {
    bitmask = 0;
    lim = (1 << n) - 1;
    for (i = 0; i < f; i++) {
      ar[i].pbitmask = 0;
      scanf("%d %d %d", &ar[i].money, &ar[i].monitor, &m);
      while (m--) {
        scanf("%d", &x);
        x--;
        ar[i].pbitmask |= (1 << x);
      }
      bitmask |= ar[i].pbitmask;
    }
    if (bitmask != lim)
      puts("-1");
    else {
      qsort(ar, f, sizeof(struct Friend), compare);
      Pregenerate();
      long long int res = ((1LL << 62) - 50);
      for (i = 0; i < f; i++) {
        long long int x = fuck[i] + ar[i].money + (b * ar[i].monitor);
        if (x < res) res = x;
      }
      printf("%I64d\n", res);
    }
  }
  return 0;
}
