#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
const int INF = (1 << 29);
const long long LINF = 1000000097999999903LL;
long long memo[1 << 20 + 1];
long long cost[102];
long long monitor[102];
int solvedMask[102];
int N, M;
long long B;
int main() {
  int cases, caseno = 0;
  scanf("%d %d %I64d", &N, &M, &B);
  memset(solvedMask, 0, sizeof(solvedMask));
  for (int i = 0; i < N; i++) {
    int noOfprob, probId;
    scanf("%I64d %I64d %d", &cost[i], &monitor[i], &noOfprob);
    while (noOfprob--) {
      scanf("%d", &probId);
      solvedMask[i] |= (1 << (probId - 1));
    }
  }
  for (int i = 0; i < N; i++) {
    for (int j = i + 1; j < N; j++) {
      if (monitor[i] < monitor[j]) {
        swap(cost[i], cost[j]);
        swap(monitor[i], monitor[j]);
        swap(solvedMask[i], solvedMask[j]);
      }
    }
  }
  for (int i = 0; i < (1 << M); i++) {
    memo[i] = LINF;
  }
  memo[0] = 0;
  long long ret = LINF;
  for (int i = 0; i < N; i++) {
    for (int j = (1 << M) - 1; j >= 0; j--) {
      int solvedProblem = solvedMask[i] | j;
      long long costz = memo[j] + cost[i];
      if (!j) {
        costz += monitor[i] * B;
      }
      memo[solvedProblem] = min(memo[solvedProblem], costz);
    }
  }
  ret = memo[(1 << M) - 1];
  if (ret < LINF) {
    printf("%I64d\n", ret);
  } else {
    printf("-1\n");
  }
  return 0;
}
