func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, s;   pair<int, int> A[200000];   pair<pair<int, int>, int> B[200000];   set<pair<pair<int, int>, int> > candidates;   pair<int, int> q[200000];   int sp, st;   int answer[200000];   bool check(int days) {     int j = n - 1;     sp = st = 0;     int used = 0;     candidates.clear();     for (int i = m - 1; i >= 0; --i) {       while (j >= 0 && B[j].first.first >= A[i].first) {         candidates.insert(make_pair(             make_pair(B[j].first.second, B[j].first.first), B[j].second));         --j;       }       if (st < sp) {         answer[A[i].second] = q[st].second + 1;         --q[st].first;         if (q[st].first == 0) ++st;       } else {         if (candidates.size() == 0) return false;         pair<pair<int, int>, int> best = *candidates.begin();         candidates.erase(candidates.begin());         used += best.first.first;         if (used > s) return false;         answer[A[i].second] = best.second + 1;         if (days > 1) q[sp++] = make_pair(days - 1, best.second);       }     }     return true;   }   int main() {     scanf( %d %d %d , &n, &m, &s);     for (int i = 0; i < m; ++i) {       scanf( %d , &A[i].first);       A[i].second = i;     }     for (int i = 0; i < n; ++i) {       scanf( %d , &B[i].first.first);       B[i].second = i;     }     for (int i = 0; i < n; ++i) scanf( %d , &B[i].first.second);     sort(A, A + m);     sort(B, B + n);     int left = 1, right = m;     while (left < right) {       int middle = (left + right) / 2;       if (check(middle))         right = middle;       else         left = middle + 1;     }     if (check(left)) {       printf( YES n%d , answer[0]);       for (int i = 1; i < m; ++i) printf(  %d , answer[i]);       printf(  n );     } else {       printf( NO n );     }     return 0;   }   