#include <bits/stdc++.h>
using namespace std;
struct node {
  int x, k;
  int mask;
};
node a[102];
long long dp[1 << 20];
bool cmp(node a, node b) { return a.k < b.k; }
int main() {
  int i, j, n, m, b;
  scanf("%d%d%d", &n, &m, &b);
  for (i = 1; i <= n; i++) {
    int M, tmp = 0;
    scanf("%d%d%d", &a[i].x, &a[i].k, &M);
    for (j = 0; j < M; j++) {
      int X;
      scanf("%d", &X);
      X--;
      tmp |= (1 << X);
    }
    a[i].mask = tmp;
  }
  sort(a + 1, a + n + 1, cmp);
  long long ans = 2000000000000000000LL;
  for (i = 0; i < (1 << m); i++) {
    dp[i] = 2000000000000000000LL;
  }
  dp[0] = 0;
  for (i = 1; i <= n; i++) {
    for (j = 0; j < (1 << m); j++) {
      int nmask = j | a[i].mask;
      if (dp[nmask] > dp[j] + a[i].x) dp[nmask] = dp[j] + a[i].x;
    }
    ans = min(ans, dp[(1 << m) - 1] + (long long)a[i].k * b);
  }
  if (ans == 2000000000000000000LL) ans = -1;
  printf("%I64d\n", ans);
  return 0;
}
