#include <bits/stdc++.h>
using namespace std;
vector<int> fellas[105];
vector<int> tasks[25];
long long price[105], disp[105], stat[105];
long long n, m, p;
long long bought;
long long ans[10000000], ans2;
long long bit[25];
long long final_ans;
int tmp, t2;
void dfs(long long b) {
  long long tmp = b;
  int a = 1;
  while (tmp & 1) {
    a++;
    tmp >>= 1;
  }
  if (a > m) return;
  for (unsigned int i = 0; i < tasks[a].size(); i++) {
    if (disp[tasks[a][i]] > bought) continue;
    if (ans[b] + price[tasks[a][i]] < ans[b | stat[tasks[a][i]]] ||
        !ans[b | stat[tasks[a][i]]]) {
      ans[b | stat[tasks[a][i]]] = ans[b] + price[tasks[a][i]];
      dfs(b | stat[tasks[a][i]]);
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> m >> p;
  bit[1] = 1;
  for (int i = 2; i <= m + 1; i++) {
    bit[i] = bit[i - 1] << 1;
  }
  for (int i = 1; i <= n; i++) {
    cin >> price[i] >> disp[i] >> tmp;
    for (int j = 1; j <= tmp; j++) {
      cin >> t2;
      fellas[i].push_back(t2);
      tasks[t2].push_back(i);
      stat[i] = stat[i] | bit[t2];
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= bit[m + 1]; j++) ans[j] = 0;
    bought = disp[i];
    dfs(0);
    if (ans[bit[m + 1] - 1])
      final_ans = final_ans ? min(final_ans, ans[bit[m + 1] - 1] + bought * p)
                            : ans[bit[m + 1] - 1] + bought * p;
  }
  cout << (final_ans ? final_ans : -1) << endl;
  return 0;
}
