#include <bits/stdc++.h>
using namespace std;
const int N = 110;
const long long Inf = (long long)1e30;
struct Node {
  int x, K, st;
  void read() {
    int d, c;
    scanf("%d%d%d", &x, &K, &d);
    st = 0;
    while (d--) {
      scanf("%d", &c);
      c--;
      st |= 1 << c;
    }
  }
  bool operator<(const Node &tt) const { return K > tt.K; }
} human[N];
int n, m;
long long B;
long long dp[2][1 << 20];
void clear(int c) {
  for (int i = 0; i < 1 << m; i++) dp[c][i] = Inf;
}
inline void toMin(long long &a, long long b) {
  if (a > b) a = b;
}
int main() {
  scanf("%d%d%lld", &n, &m, &B);
  for (int i = 0; i < n; i++) {
    human[i].read();
  }
  sort(human, human + n);
  int cur = 0, nex = 1;
  clear(cur);
  clear(nex);
  dp[0][0] = 0;
  for (int i = 0; i < n; i++) {
    int x = human[i].x;
    int K = human[i].K;
    int st = human[i].st;
    for (int s = 0; s < 1 << m; s++)
      if (dp[cur][s] != Inf) {
        long long val = dp[cur][s];
        toMin(dp[nex][s], val);
        toMin(dp[nex][s | st], val + (val == 0 ? B * K : 0) + x);
      }
    swap(cur, nex);
    clear(nex);
  }
  long long ans = dp[cur][(1 << m) - 1];
  printf("%lld\n", ans == Inf ? -1 : ans);
  return 0;
}
