#include <bits/stdc++.h>
using namespace std;
struct Edge {
  int v, f;
  Edge *next, *rest;
};
int n, m, b, x[100], k[100], p[100];
long long dp[1048576];
long long ans = 0x3FFFFFFFFFFFFFFFLL;
int main() {
  scanf("%d%d%d", &n, &m, &b);
  for (int i = 0, len; i < n; i++) {
    scanf("%d%d%d", &x[i], &k[i], &len);
    for (int j = 0, t; j < len; j++) scanf("%d", &t), p[i] |= 1 << (t - 1);
    p[i] ^= (1 << m) - 1;
  }
  for (int i = 0; i < n; i++) {
    for (int j = n - 1; j > i; j--) {
      if (k[j - 1] > k[j])
        swap(k[j - 1], k[j]), swap(x[j - 1], x[j]), swap(p[j - 1], p[j]);
    }
  }
  for (int i = 1; i < 1 << m; i++) dp[i] = 0x3FFFFFFFFFFFFFFFLL;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < 1 << m; j++) dp[j] = min(dp[j], dp[j & p[i]] + x[i]);
    if (dp[(1 << m) - 1] < 0x3FFFFFFFFFFFFFFFLL)
      ans = min(ans, dp[(1 << m) - 1] + (long long)k[i] * b);
  }
  printf("%I64d", ans == 0x3FFFFFFFFFFFFFFFLL ? -1 : ans);
  getchar();
  getchar();
  return 0;
}
