using System.Collections.Generic;
public static void Main()
string[] firstLine = Console.ReadLine().Split(' ');
int numberOfVehicles = int.Parse(firstLine[0]);
int truckVolume = int.Parse(firstLine[1]);
int[,] input = new int[numberOfVehicles, 2];
for(int i = 0; i < numberOfVehicles; i++)
string[] line = Console.ReadLine().Split(' ');
input[i, 0] = int.Parse(line[0]);
input[i, 1] = int.Parse(line[1]);
var vehiclesList = new List<Vehicle>();
for(int i = 0; i < numberOfVehicles; i++)
vehiclesList.Add(new Vehicle(i, input[i, 0], input[i, 1]));
var sortedVehiclesList = from v in vehiclesList
orderby v.Efficiency descending
var sortedList = sortedVehiclesList.ToList();
var solutionList = new List<Vehicle>();
int remainedTruckVolume = truckVolume;
for(int i = 0; i < numberOfVehicles; i++)
var vehicle = sortedList[i];
solutionList.Add(vehicle);
remainedTruckVolume -= vehicle.Type;
if(remainedTruckVolume == 0)
else if(remainedTruckVolume < 0)
remainedTruckVolume += solutionList.Last().Type;
solutionList.RemoveAt(solutionList.Count - 1);
if(i == numberOfVehicles - 1)
var kayaks = from s in solutionList
int min = kayaks.Min(k => k.Capacity);
Vehicle vToRemove = kayaks.Where(k => k.Capacity == min).First();
solutionList.Remove(vToRemove);
foreach(var v in sortedList)
if(v.ID == 2 && !solutionList.Contains(v))
string vehiclesString = "";
foreach(var vehicle in solutionList)
totalCapacity += vehicle.Capacity;
vehiclesString += ((vehicle.ID + 1).ToString()+ " ");
Console.WriteLine(totalCapacity);
Console.WriteLine(vehiclesString);
public int Type{get; set;}
public int Capacity{get; set;}
public double Efficiency{get; set;}
public Vehicle(int id, int type, int capacity)
Efficiency = type == 1 ? (double)capacity : (double)capacity / type;