#include <bits/stdc++.h>
using namespace std;
const int maxn = 100 + 10;
struct Node {
  int x, k, msk;
  bool operator<(const Node &a) const { return k < a.k; }
} node[maxn];
long long dp[1 << 20];
int main() {
  int n, m, b;
  scanf("%d%d%d", &n, &m, &b);
  int N = 1 << m, tot, v;
  for (int i = 1; i <= n; ++i) {
    scanf("%d%d%d", &node[i].x, &node[i].k, &tot);
    node[i].msk = 0;
    while (tot--) {
      scanf("%d", &v);
      v--;
      node[i].msk |= (1 << v);
    }
  }
  sort(node + 1, node + n + 1);
  long long ans = 0x3FFFFFFFFFFFFFFFLL, tmp;
  for (int i = 0; i < N; ++i) dp[i] = 0x3FFFFFFFFFFFFFFFLL;
  dp[0] = 0;
  for (int i = 1; i <= n; ++i) {
    for (int j = 0; j < N; ++j) {
      dp[j | node[i].msk] = min(dp[j | node[i].msk], dp[j] + node[i].x);
    }
    if (dp[N - 1] == 0x3FFFFFFFFFFFFFFFLL) continue;
    tmp = dp[N - 1] + (long long)b * node[i].k;
    if (tmp < ans) ans = tmp;
  }
  if (ans == 0x3FFFFFFFFFFFFFFFLL)
    printf("-1\n");
  else
    printf("%I64d\n", ans);
  return 0;
}
