#include <bits/stdc++.h>
using namespace std;
int min(int a, int b) {
  if (a < b)
    return a;
  else
    return b;
}
int max(int a, int b) {
  if (a > b)
    return a;
  else
    return b;
}
struct node {
  int moni, cost, s;
} v[110];
int n, m, k, p;
int x, y;
long long b;
int ps;
long long dp[(1 << 20) + 20];
long long ans = -1;
inline bool cmp(node aa, node bb) { return aa.moni < bb.moni; }
inline void update(int i, long long c) {
  if (dp[i] == -1 || dp[i] > c) dp[i] = c;
}
void solve() {
  cin >> n >> m >> b;
  for (int i = 0; i < n; i++) {
    cin >> x >> y >> k;
    ps = 0;
    while (k--) {
      cin >> p;
      p--;
      ps += (1 << p);
    }
    v[i].moni = y;
    v[i].cost = x;
    v[i].s = ps;
  }
  sort(v, v + n, cmp);
  memset(dp, -1, sizeof(dp));
  dp[0] = 0;
  int mm = (1 << m) - 1;
  for (int i = 0; i < n; i++) {
    for (int j = mm; j >= 0; j--) {
      if (dp[j] == -1) continue;
      p = j | v[i].s;
      update(p, dp[j] + v[i].cost);
    }
    if (dp[mm] != -1) {
      if (ans == -1 || ans > dp[mm] + b * v[i].moni)
        ans = dp[mm] + b * v[i].moni;
    }
  }
  cout << ans << endl;
}
int main() {
  int T;
  T = 1;
  while (T--) solve();
  return 0;
}
