func_code_string: #include <bits/stdc++.h>   using namespace std;   using ll = long long;   int32_t main() {     ios::sync_with_stdio(0);     cin.tie(0);     long long n, m, k, s;     cin >> n >> m >> k >> s;     vector<vector<long long>> a(2, vector<long long>(n));     for (long long i = 0; i < 2; ++i) {       for (long long j = 0; j < n; ++j) {         cin >> a[i][j];       }     }     vector<vector<pair<long long, long long>>> g(2);     for (long long i = 0; i < m; ++i) {       long long x, y;       cin >> x >> y;       g[x - 1].push_back({y, i});     }     for (long long i = 0; i < 2; ++i) {       sort(g[i].begin(), g[i].end());     }     auto ok = [&](long long q) {       vector<long long> p(2, numeric_limits<long long>::max());       vector<long long> day(2, -1);       for (long long i = 0; i <= q; ++i) {         for (long long j = 0; j < 2; ++j) {           if (p[j] > a[j][i]) {             p[j] = a[j][i];             day[j] = i;           }         }       }       assert(day[0] != -1 && day[1] != -1);       long long i = 0, j = 0;       vector<pair<long long, long long>> ans;       long long ss = s;       auto buyi = [&]() {         ss -= p[0] * g[0][i].first;         ans.push_back({g[0][i].second, day[0]});         ++i;       };       auto buyj = [&]() {         ss -= p[1] * g[1][j].first;         ans.push_back({g[1][j].second, day[1]});         ++j;       };       while ((i < g[0].size() || j < g[1].size()) && ans.size() < k) {         if (i >= g[0].size()) {           buyj();         } else if (j >= g[1].size()) {           buyi();         } else {           if (p[0] * g[0][i].first < p[1] * g[1][j].first)             buyi();           else             buyj();         }       }       if (ss < 0 || ans.size() < k) ans.clear();       return ans;     };     if (ok(n - 1).size() == 0) {       cout <<  -1 n ;       return 0;     }     long long l = 0, r = n - 1;     while (r - l > 1) {       long long mid = (l + r) >> 1;       if (ok(mid).size()) {         r = mid;       } else {         l = mid + 1;       }     }     if (!ok(l).size()) {       l = r;     }     cout << l + 1 <<   n ;     for (auto [x, y] : ok(l)) {       cout << x + 1 <<     << y + 1 <<   n ;     }   }   