#include <stdio.h>
#include <vector>
#include <algorithm>
#define BACKPACKS_NUMBER 2
struct Item {
int id, value, size;
};
struct Backpack {
int max_size, current_size;
std::vector<Item> items;
};
void getInputs(std::vector<Item> &, Backpack [], int &);
void packBackpacks(std::vector<Item>, Backpack []);
bool sortByValue(Item &, Item &);
void printAnswer(Backpack[]);
bool sortById(Item &, Item &);
int main(){
std::vector<Item> all_items;
Backpack backpacks[BACKPACKS_NUMBER] = {};
int items_number = 0, i = 0;
getInputs(all_items, backpacks, items_number);
std::sort(all_items.begin(), all_items.end(), sortByValue);
packBackpacks(all_items, backpacks);
printAnswer(backpacks);
return 0;
}
void getInputs(std::vector<Item> &all_items, Backpack backpacks[], int &items_number){
int i = 0;
scanf("%i", &items_number);
scanf("%i", &backpacks[0].max_size);
scanf("%i", &backpacks[1].max_size);
for(; i < items_number; i++){
Item item;
item.id = i+1;
scanf("%i", &item.value);
scanf("%i", &item.size);
all_items.push_back(item);
}
}
void packBackpacks(std::vector<Item> all_items, Backpack backpacks[]){
for(int i = 0; i < all_items.size(); i++){
bool isAdded = false;
for(int c = 0; c < BACKPACKS_NUMBER; c++){
if(!isAdded){
if(backpacks[c].current_size + all_items[i].size <= backpacks[c].max_size){
isAdded = true;
backpacks[c].current_size += all_items[i].size;
backpacks[c].items.push_back(all_items[i]);
}
} else {
break;
}
}
}
}
bool sortByValue(Item &a, Item &b){
return a.value > b.value;
}
void printAnswer(Backpack backpacks[]){
int max_value = 0, i = 0, c = 0;
for(; i < BACKPACKS_NUMBER; i++){
for(c = 0; c < backpacks[i].items.size(); c++){
max_value += backpacks[i].items[c].value;
}
}
printf("%d\n", max_value);
for(i = 0; i < BACKPACKS_NUMBER; i++){
std::sort(backpacks[i].items.begin(), backpacks[i].items.end(), sortById);
for(c = 0; c < backpacks[i].items.size(); c++){
printf("%d ", backpacks[i].items[c].id);
}
printf("%c", '\n');
}
}
bool sortById(Item &a, Item &b){
return a.id < b.id;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CgojZGVmaW5lIEJBQ0tQQUNLU19OVU1CRVIgMgoKc3RydWN0IEl0ZW0gewogIGludCBpZCwgdmFsdWUsIHNpemU7Cn07CgpzdHJ1Y3QgQmFja3BhY2sgewogIGludCBtYXhfc2l6ZSwgY3VycmVudF9zaXplOwogIHN0ZDo6dmVjdG9yPEl0ZW0+IGl0ZW1zOwp9OwoKdm9pZCBnZXRJbnB1dHMoc3RkOjp2ZWN0b3I8SXRlbT4gJiwgQmFja3BhY2sgW10sIGludCAmKTsKdm9pZCBwYWNrQmFja3BhY2tzKHN0ZDo6dmVjdG9yPEl0ZW0+LCBCYWNrcGFjayBbXSk7CmJvb2wgc29ydEJ5VmFsdWUoSXRlbSAmLCBJdGVtICYpOwp2b2lkIHByaW50QW5zd2VyKEJhY2twYWNrW10pOwpib29sIHNvcnRCeUlkKEl0ZW0gJiwgSXRlbSAmKTsKCmludCBtYWluKCl7CiAgc3RkOjp2ZWN0b3I8SXRlbT4gYWxsX2l0ZW1zOwogIEJhY2twYWNrIGJhY2twYWNrc1tCQUNLUEFDS1NfTlVNQkVSXSA9IHt9OwogIGludCBpdGVtc19udW1iZXIgPSAwLCBpID0gMDsKCiAgZ2V0SW5wdXRzKGFsbF9pdGVtcywgYmFja3BhY2tzLCBpdGVtc19udW1iZXIpOwogIHN0ZDo6c29ydChhbGxfaXRlbXMuYmVnaW4oKSwgYWxsX2l0ZW1zLmVuZCgpLCBzb3J0QnlWYWx1ZSk7CiAgcGFja0JhY2twYWNrcyhhbGxfaXRlbXMsIGJhY2twYWNrcyk7CiAgcHJpbnRBbnN3ZXIoYmFja3BhY2tzKTsKCiAgcmV0dXJuIDA7Cn0KCnZvaWQgZ2V0SW5wdXRzKHN0ZDo6dmVjdG9yPEl0ZW0+ICZhbGxfaXRlbXMsIEJhY2twYWNrIGJhY2twYWNrc1tdLCBpbnQgJml0ZW1zX251bWJlcil7CiAgaW50IGkgPSAwOwoKICBzY2FuZigiJWkiLCAmaXRlbXNfbnVtYmVyKTsKICBzY2FuZigiJWkiLCAmYmFja3BhY2tzWzBdLm1heF9zaXplKTsKICBzY2FuZigiJWkiLCAmYmFja3BhY2tzWzFdLm1heF9zaXplKTsKCiAgZm9yKDsgaSA8IGl0ZW1zX251bWJlcjsgaSsrKXsKICAgIEl0ZW0gaXRlbTsKICAgIGl0ZW0uaWQgPSBpKzE7CgogICAgc2NhbmYoIiVpIiwgJml0ZW0udmFsdWUpOwogICAgc2NhbmYoIiVpIiwgJml0ZW0uc2l6ZSk7CgogICAgYWxsX2l0ZW1zLnB1c2hfYmFjayhpdGVtKTsKICB9Cn0KCnZvaWQgcGFja0JhY2twYWNrcyhzdGQ6OnZlY3RvcjxJdGVtPiBhbGxfaXRlbXMsIEJhY2twYWNrIGJhY2twYWNrc1tdKXsKICBmb3IoaW50IGkgPSAwOyBpIDwgYWxsX2l0ZW1zLnNpemUoKTsgaSsrKXsKICAgIGJvb2wgaXNBZGRlZCA9IGZhbHNlOwogICAgZm9yKGludCBjID0gMDsgYyA8IEJBQ0tQQUNLU19OVU1CRVI7IGMrKyl7CiAgICAgIGlmKCFpc0FkZGVkKXsKICAgICAgICBpZihiYWNrcGFja3NbY10uY3VycmVudF9zaXplICsgYWxsX2l0ZW1zW2ldLnNpemUgPD0gYmFja3BhY2tzW2NdLm1heF9zaXplKXsKICAgICAgICAgIGlzQWRkZWQgPSB0cnVlOwogICAgICAgICAgYmFja3BhY2tzW2NdLmN1cnJlbnRfc2l6ZSArPSBhbGxfaXRlbXNbaV0uc2l6ZTsKICAgICAgICAgIGJhY2twYWNrc1tjXS5pdGVtcy5wdXNoX2JhY2soYWxsX2l0ZW1zW2ldKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9Cn0KCmJvb2wgc29ydEJ5VmFsdWUoSXRlbSAmYSwgSXRlbSAmYil7CiAgcmV0dXJuIGEudmFsdWUgPiBiLnZhbHVlOwp9Cgp2b2lkIHByaW50QW5zd2VyKEJhY2twYWNrIGJhY2twYWNrc1tdKXsKICBpbnQgbWF4X3ZhbHVlID0gMCwgaSA9IDAsIGMgPSAwOyAKICBmb3IoOyBpIDwgQkFDS1BBQ0tTX05VTUJFUjsgaSsrKXsKICAgIGZvcihjID0gMDsgYyA8IGJhY2twYWNrc1tpXS5pdGVtcy5zaXplKCk7IGMrKyl7CiAgICAgIG1heF92YWx1ZSArPSBiYWNrcGFja3NbaV0uaXRlbXNbY10udmFsdWU7CiAgICB9CiAgfQogIHByaW50ZigiJWRcbiIsIG1heF92YWx1ZSk7CgogIGZvcihpID0gMDsgaSA8IEJBQ0tQQUNLU19OVU1CRVI7IGkrKyl7CiAgICBzdGQ6OnNvcnQoYmFja3BhY2tzW2ldLml0ZW1zLmJlZ2luKCksIGJhY2twYWNrc1tpXS5pdGVtcy5lbmQoKSwgc29ydEJ5SWQpOwogICAgZm9yKGMgPSAwOyBjIDwgYmFja3BhY2tzW2ldLml0ZW1zLnNpemUoKTsgYysrKXsKICAgICAgcHJpbnRmKCIlZCAiLCBiYWNrcGFja3NbaV0uaXRlbXNbY10uaWQpOwogICAgfQogICAgcHJpbnRmKCIlYyIsICdcbicpOwogIH0KfQoKYm9vbCBzb3J0QnlJZChJdGVtICZhLCBJdGVtICZiKXsKICByZXR1cm4gYS5pZCA8IGIuaWQ7Cn0K