#include <bits/stdc++.h>
using namespace std;
const int N = 110, P = 131, mod = 1e9 + 7;
const double PI = 3.1415926535;
struct Vector {
  double x, y;
  Vector operator-(const Vector& a) { return {x - a.x, y - a.y}; }
  Vector operator+(const Vector& a) { return {x + a.x, y + a.y}; }
  double operator*(const Vector& t) { return x * t.x + y * t.y; }
  void operator=(const Vector& t) { this->x = t.x, this->y = t.y; }
};
struct E {
  int x, k, st;
  bool operator<(const E t) const { return k < t.k; }
} a[N];
long long dp[(1 << 20)];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, m, b;
  cin >> n >> m >> b;
  for (int i = 1; i <= n; i++) {
    int x, k, s;
    cin >> x >> k >> s;
    for (int j = 1; j <= s; j++) {
      int temp;
      cin >> temp;
      a[i].st |= 1 << (temp - 1);
    }
    a[i].x = x, a[i].k = k;
  }
  sort(a + 1, a + n + 1);
  for (int i = 1; i <= 1 << m; i++) dp[i] = 2e18;
  dp[0] = 0;
  long long res = 2e18;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < 1 << m; j++)
      if ((j | a[i].st) == (1 << m) - 1)
        res = min(res, (long long)a[i].k * b + a[i].x + dp[j]);
    for (int j = 0; j < 1 << m; j++)
      dp[j | a[i].st] = min(dp[j | a[i].st], dp[j] + a[i].x);
  }
  if (res == (long long)2e18)
    puts("-1");
  else
    printf("%lld", res);
  return 0;
}
