#include <bits/stdc++.h>
using namespace std;
int n, m, b;
int can[100], req_mon[100], cost[100];
int ord[100];
long long dp[2][1 << 20];
int main() {
  scanf("%d %d %d", &n, &m, &b);
  for (int i = 0; i < (n); i++) {
    int q;
    scanf("%d %d %d", cost + i, req_mon + i, &q);
    while (q--) {
      int x;
      scanf("%d", &x);
      x--;
      can[i] |= 1 << x;
    }
    ord[i] = i;
  }
  sort(ord, ord + n,
       [](const int a, const int& b) { return req_mon[a] < req_mon[b]; });
  long long ans = 1LL << 60;
  fill(dp[0], dp[2], 1LL << 60);
  dp[0][0] = 0;
  int one = 1, other = 0;
  for (int j = 0; j < (n); j++) {
    int i = ord[j];
    for (int msk = 0; msk < (1 << m); msk++) dp[one][msk] = dp[other][msk];
    for (int msk = 0; msk < (1 << m); msk++)
      dp[one][msk | can[i]] =
          min(dp[one][msk | can[i]], dp[other][msk] + cost[i]);
    ans = min(ans, dp[one][(1 << m) - 1] + req_mon[i] * 1LL * b);
    swap(one, other);
  }
  if (ans >= (1LL << 60)) ans = -1;
  cout << ans << endl;
  cerr << ans << endl;
  return 0;
}
