#include <bits/stdc++.h>
using namespace std;
long long dp[2000000];
long long key, MAX, MIN;
long long temp;
long long n, m, b;
inline long long min(long long a, long long b) {
  if (a == -1) return b;
  if (b == -1) return a;
  return a < b ? a : b;
}
struct node {
  long long xi, ki, mi;
  long long zt;
} user[110];
bool cmp(node a, node b) { return a.ki < b.ki; }
int main() {
  scanf("%I64d%I64d%I64d", &n, &m, &b);
  MAX = (1 << m) - 1;
  MIN = -1;
  memset(user, 0, sizeof(user));
  for (long long i = 1; i <= n; i++) {
    scanf("%I64d%I64d%I64d", &user[i].xi, &user[i].ki, &user[i].mi);
    user[i].zt = 0;
    for (long long j = 1; j <= user[i].mi; j++) {
      scanf("%I64d", &temp);
      user[i].zt += (1 << (temp - 1));
    }
  }
  sort(user + 1, user + n + 1, cmp);
  memset(dp, -1, sizeof(dp));
  dp[0] = 0;
  for (long long i = 1; i <= n; i++) {
    if (i != 1 && user[i].ki == user[i - 1].ki) continue;
    key = user[i].ki;
    for (long long ii = 0; ii <= MAX; ii++) {
      if (dp[ii] == -1) continue;
      for (long long j = i; user[j].ki == user[i].ki; j++) {
        dp[user[j].zt | ii] = min(dp[user[j].zt | ii], dp[ii] + user[j].xi);
      }
    }
    if (dp[MAX] != -1) MIN = min(MIN, dp[MAX] + user[i].ki * b);
  }
  cout << MIN << endl;
  return 0;
}
