#include <bits/stdc++.h>
using namespace std;
const int maxD = 1 << 20;
long long dyn[maxD];
struct CFriend {
  int price;
  int mon;
  int mask;
};
bool friendsCmp(const CFriend& first, const CFriend& second) {
  return first.mon <= second.mon;
}
int main() {
  int n, m;
  long long b;
  while (cin >> n >> m >> b) {
    int ansMask = (1 << m) - 1;
    vector<CFriend> friends(n);
    for (int i = 0; i < n; i++) {
      cin >> friends[i].price >> friends[i].mon;
      friends[i].mask = 0;
      int taskCount;
      cin >> taskCount;
      for (int j = 0; j < taskCount; j++) {
        int task;
        cin >> task;
        task--;
        friends[i].mask |= (1 << task);
      }
    }
    sort(friends.begin(), friends.end(), friendsCmp);
    long long bestAns = -1;
    for (int j = 0; j < maxD; j++) {
      dyn[j] = -1;
    }
    dyn[0] = 0;
    for (int j = 0; j < n; j++) {
      for (int i = 0; i <= ansMask; i++) {
        int mask = i;
        if (dyn[mask] == -1) {
          continue;
        }
        int newMask = mask | friends[j].mask;
        if (newMask == mask) {
          continue;
        }
        long long price = dyn[mask] + friends[j].price;
        if (dyn[newMask] == -1) {
          dyn[newMask] = price;
        } else {
          dyn[newMask] = min(dyn[newMask], price);
        }
      }
      if (dyn[ansMask] != -1) {
        long long ans = dyn[ansMask] + friends[j].mon * b;
        bestAns = bestAns == -1 ? ans : min(bestAns, ans);
      }
    }
    cout << bestAns << endl;
  }
  return 0;
}
