Problem p02683 (C++) — buggy submission, verdict: Runtime Error

// 失敗するからこそ
// そこから立ち向かって行く強さがあってそんな強さが本当の強さだと私は思うから
#ifdef DAIJOBU
#include "/home/v-o_o-v/deb.h"
#define deb(x...)                                                              \\
  cerr << "[" << #x << "] = [";                                                \\
  _print(x)
#else
#include <bits/stdc++.h>
#define deb(x...)
#endif

using namespace std;

#define mp make_pair
#define mt make_tuple
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define forn(i, n) for (int i = 0; i < (int)(n); ++i)
#define for1(i, n) for (int i = 1; i <= (int)(n); ++i)
#define ford(i, n) for (int i = (int)(n)-1; i >= 0; --i)
#define fore(i, a, b) for (int i = (int)(a); i <= (int)(b); ++i)

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<pii> vpi;
typedef long long lint;
typedef double ld;

void a();
void b();
void c();
void d();
void e();
void f();

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);

  // a();
  // b();
  c();
  // d();
  // e();
  // f();
  return 0;
}

void a() {
  string s, t;
  cin >> s >> t;
  t.erase(t.begin() + s.size());
  if (s == t)
    puts("Yes");
  else
    puts("No");
}

void b() {
  lint a, b, c, k;
  cin >> a >> b >> c >> k;
  lint ans = min(a, k);
  k -= min(a, k);
  k -= min(b, k);
  ans -= min(c, k);
  cout << ans;
}

void c() {
  int n, m, x;
  cin >> n >> m >> x;
  vector<lint> a[150], c(150);
  forn(i, n) {
    cin >> c[i];
    a[i].resize(150);
    forn(j, m) cin >> a[i][j];
  }
  lint ans = LLONG_MAX;
  for (int i = 0; i < (1 << n); i++) {
    vector<lint> sel, A(150, 0);
    for (int j = 0; j < n; j++) {
      if (i & (1 << j))
        sel.pb(j);
    }
    lint cs = 0;
    for (auto j : sel) {
      cs += c[j];
      forn(k, a[j].size()) A[k] += a[j][k];
    }
    int ct = 0;
    forn(j, m) if (A[j] >= x) ct++;
    if (ct == m) {
      ans = min(ans, cs);
    }
  }
  if (ans == LLONG_MAX)
    cout << -1;
  else
    cout << ans;
}

void d() {}

void e() {}

void f() {}

Error: WA

Fixed submission:

// 失敗するからこそ
// そこから立ち向かって行く強さがあってそんな強さが本当の強さだと私は思うから
#ifdef DAIJOBU
#include "/home/v-o_o-v/deb.h"
#define deb(x...)                                                              \\
  cerr << "[" << #x << "] = [";                                                \\
  _print(x)
#else
#include <bits/stdc++.h>
#define deb(x...)
#endif

using namespace std;

#define mp make_pair
#define mt make_tuple
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define forn(i, n) for (int i = 0; i < (int)(n); ++i)
#define for1(i, n) for (int i = 1; i <= (int)(n); ++i)
#define ford(i, n) for (int i = (int)(n)-1; i >= 0; --i)
#define fore(i, a, b) for (int i = (int)(a); i <= (int)(b); ++i)

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<pii> vpi;
typedef long long lint;
typedef double ld;

void a();
void b();
void c();
void d();
void e();
void f();

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);

  // a();
  // b();
  c();
  // d();
  // e();
  // f();
  return 0;
}

void a() {
  string s, t;
  cin >> s >> t;
  t.erase(t.begin() + s.size());
  if (s == t)
    puts("Yes");
  else
    puts("No");
}

void b() {
  lint a, b, c, k;
  cin >> a >> b >> c >> k;
  lint ans = min(a, k);
  k -= min(a, k);
  k -= min(b, k);
  ans -= min(c, k);
  cout << ans;
}

void c() {
  int n, m, x;
  cin >> n >> m >> x;
  vector<lint> a[n], c(n);
  forn(i, n) {
    cin >> c[i];
    a[i].resize(m);
    forn(j, m) cin >> a[i][j];
  }
  lint ans = LLONG_MAX;
  for (int i = 0; i < (1 << n); i++) {
    vector<lint> sel, A(n, 0);
    for (int j = 0; j < n; j++) {
      if (i & (1 << j))
        sel.pb(j);
    }
    lint cs = 0;
    for (auto j : sel) {
      cs += c[j];
      forn(k, a[j].size()) A[k] += a[j][k];
    }
    int ct = 0;
    forn(j, n) if (A[j] >= x) ct++;
    if (ct == m) {
      ans = min(ans, cs);
    }
  }
  if (ans == LLONG_MAX)
    cout << -1;
  else
    cout << ans;
}

void d() {}

void e() {}

void f() {}