#include <bits/stdc++.h>
using namespace std;
struct Node {
  int x;
  int k;
  int m;
  int p[25];
  void read() {
    cin >> x >> k >> m;
    for (int i = 0; i < m; i++) {
      cin >> p[i];
      p[i]--;
    }
  }
  bool operator<(const Node& t) const { return k < t.k; }
};
const long long INF = 0x7f7f7f7f7f7f7f7fLL;
Node a[110];
int n, m;
long long b;
long long dp[1100000];
int main() {
  cin >> n >> m >> b;
  for (int i = 0; i < n; i++) a[i].read();
  sort(a, a + n);
  long long ans = INF;
  memset(dp, 0x7f, sizeof(dp));
  dp[0] = 0;
  int S = (1 << m) - 1;
  for (int i = 0; i < n; i++) {
    int t = 0;
    for (int j = 0; j < a[i].m; j++) t |= 1 << a[i].p[j];
    for (int s = 0; s < (1 << m); s++) {
      dp[t | s] = min(dp[t | s], dp[s] + a[i].x);
      if (dp[S] < INF) ans = min(ans, dp[S] + a[i].k * b);
    }
  }
  if (ans == INF)
    puts("-1");
  else
    cout << ans << endl;
  return 0;
}
