#include <bits/stdc++.h>
using namespace std;
long long int dp[1 << 20][2];
long long int sol[101][20];
long long int mark[101];
long long int inf = 5e18;
bool flag = 0;
struct node {
  long long int c, m, k;
  int mask;
};
bool comp(node a, node b) { return a.k < b.k; }
node cost[101];
long long int N, M, b;
int main() {
  ios_base::sync_with_stdio(0);
  long long int i, j, k;
  scanf("%lld", &N);
  scanf("%lld", &M);
  scanf("%lld", &b);
  long long int ans = inf;
  long long int last = (1 << M);
  for (i = 1; i <= N; i++) {
    scanf("%lld", &cost[i].c);
    scanf("%lld", &cost[i].k);
    scanf("%lld", &cost[i].m);
    cost[i].mask = 0;
    for (j = 0; j < cost[i].m; j++) {
      int x;
      scanf("%d", &x);
      cost[i].mask += (1 << (x - 1));
    }
  }
  sort(cost + 1, cost + N + 1, comp);
  for (j = 0; j < last; j++) dp[j][0] = dp[j][1] = inf;
  dp[0][0] = 0;
  for (i = 1; i <= N; i++) {
    dp[0][0] = 0;
    for (j = 0; j < last; j++) {
      int mask = j | cost[i].mask;
      dp[mask][1] = min(dp[mask][1], dp[j][0] + cost[i].c);
    }
    ans = min(ans, dp[last - 1][1] + cost[i].k * b);
    for (j = 0; j < last; j++) dp[j][0] = dp[j][1];
  }
  if (ans >= inf)
    cout << "-1\n";
  else
    cout << ans << endl;
  return 0;
}
