#include <bits/stdc++.h>
using namespace std;
struct fd {
  int x, k, a, m;
  fd() {}
  void eat() {
    int tmp;
    scanf("%d%d%d", &x, &k, &m);
    for (int i = (0); i < (m); i++) {
      scanf("%d", &tmp);
      tmp--;
      a |= 1 << tmp;
    }
  }
  bool operator<(fd p) const {
    if (k != p.k) return k < p.k;
    return x < p.x;
  }
} f[101];
int n, m;
long long b;
long long dp[2][1 << 20] = {0};
int fin;
int main() {
  scanf("%d%d", &n, &m);
  cin >> b;
  for (int i = (0); i < (n); i++) f[i].eat();
  sort(f, f + n);
  fin = (1 << m) - 1;
  int tmp = 0;
  for (int i = (0); i < (n); i++) tmp |= f[i].a;
  if (tmp != fin) {
    puts("-1");
    return 0;
  }
  long long ans = (1LL << 62);
  for (int i = (1); i <= (fin); i++) {
    if ((i | f[0].a) != f[0].a)
      dp[0][i] = (1LL << 62);
    else
      dp[0][i] = f[0].x;
  }
  ans = ((ans) < (dp[0][fin] + f[0].k * b) ? (ans) : (dp[0][fin] + f[0].k * b));
  for (int i = (1); i < (n); i++) {
    for (int j = (1); j <= (fin); j++) {
      long long ret = (1LL << 62);
      int tmp = j;
      tmp -= tmp & f[i].a;
      ret = ((ret) < (dp[(i - 1) & 1][j]) ? (ret) : (dp[(i - 1) & 1][j]));
      ret = ((ret) < (dp[(i - 1) & 1][tmp] + f[i].x)
                 ? (ret)
                 : (dp[(i - 1) & 1][tmp] + f[i].x));
      dp[i & 1][j] = ret;
    }
    ans =
        ((ans) < (dp[i & 1][fin] + f[i].k * b) ? (ans)
                                               : (dp[i & 1][fin] + f[i].k * b));
  }
  cout << ans << '\n';
  return 0;
}
