func_code_string: #include <bits/stdc++.h>   using namespace std;   bool cmp(pair<int, int> p1, pair<int, int> p2) { return p2.second < p1.second; }   vector<pair<int, int> > k;   vector<pair<int, int> > c;   vector<pair<int, int> > ans;   int main() {     int n, v;     int t, p;     cin >> n >> v;     for (int i = 0; i < n; i++) {       cin >> t >> p;       if (t == 1) {         k.push_back(make_pair(i + 1, p));       } else {         c.push_back(make_pair(i + 1, p));       }     }     sort(k.begin(), k.end(), cmp);     sort(c.begin(), c.end(), cmp);     int cur = 0;     while (v > 1 && cur < c.size()) {       ans.push_back(c[cur]);       v -= 2;       cur++;     }     int last = ans.size() - 1;     int nowk = 0;     while (v > 0 && nowk < k.size()) {       ans.push_back(k[nowk]);       v -= 1;       nowk++;     }     for (; nowk < k.size() - 1 && last >= 0; nowk += 2) {       if (k[nowk].second + k[nowk + 1].second > ans[last].second) {         ans.erase(ans.begin() + last);         ans.push_back(k[nowk]);         ans.push_back(k[nowk + 1]);         last--;       }     }     if (last >= 0 && nowk == k.size() - 1) {       if (k[nowk].second > ans[last].second) {         ans.erase(ans.begin() + last);         ans.push_back(k[nowk]);         last--;       }     }     if (ans.size() > 0) {       int tot = 0;       for (int i = 0; i < ans.size(); i++) tot += ans[i].second;       cout << tot << endl << ans[0].first << endl;       for (int i = 1; i < ans.size(); i++) cout << ans[i].first <<    ;       cout << endl;     } else {       cout <<  0  << endl;     }     return 0;   }   