#include <bits/stdc++.h>
using namespace std;
struct F {
  int x, k, v;
  bool operator<(const F &first) const { return k < first.k; }
} first[110];
int n, m, b;
long long dp[1 << 21], ans;
int main() {
  scanf("%d%d%d", &n, &m, &b);
  for (int i = 0; i < n; i++) {
    first[i].v = 0;
    int t;
    scanf("%d%d%d", &first[i].x, &first[i].k, &t);
    for (int j = 0; j < t; j++) {
      int v;
      scanf("%d", &v);
      first[i].v |= (1 << (v - 1));
    }
  }
  sort(first, first + n);
  ans = ((long long)(4e18));
  memset(dp, 0x3f, sizeof(dp));
  dp[0] = 0;
  int M = (1 << m);
  for (int i = 0; i < n; i++) {
    for (int j = M - 1; j >= 0; j--) {
      if (dp[j] < ((long long)(4e18)))
        dp[j | first[i].v] = min(dp[j | first[i].v], dp[j] + first[i].x);
    }
    ans = min(ans, dp[M - 1] + (long long)b * (long long)first[i].k);
  }
  if (ans == ((long long)(4e18)))
    puts("-1");
  else
    cout << ans << endl;
  return 0;
}
