#include <bits/stdc++.h>
using namespace std;
long long const inf = 4e18;
int const N = 105;
int const M = 20;
int n, m, b;
struct Node {
  long long x, y;
  int s;
  bool operator<(const Node& e) const { return y < e.y; }
} p[N];
long long dp[(1 << M) + 10];
long long solve() {
  long long ans = inf;
  memset(dp, -1, sizeof(dp));
  dp[0] = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < (1 << m); j++) {
      if (dp[j] == -1) continue;
      if (dp[j | p[i].s] == -1) {
        dp[j | p[i].s] = dp[j] + p[i].x;
      } else
        dp[j | p[i].s] = min(dp[j | p[i].s], dp[j] + p[i].x);
    }
    if (dp[(1 << m) - 1] != -1) ans = min(ans, dp[(1 << m) - 1] + p[i].y * b);
  }
  return ans == inf ? -1 : ans;
}
int main() {
  scanf("%d%d%d", &n, &m, &b);
  for (int i = 0; i < n; i++) {
    int pro;
    scanf("%lld%lld%d", &p[i].x, &p[i].y, &pro);
    for (int j = 1; j <= pro; j++) {
      int k;
      scanf("%d", &k);
      p[i].s |= 1 << (m - k);
    }
  }
  sort(p, p + n);
  printf("%lld", solve());
  return 0;
}
