#include <bits/stdc++.h>
#define ll long long
#define endl '\n'
#define Arr_MAX 100000
using namespace std;
int main()
{
freopen("in.inp","r",stdin);
freopen("out.out","w",stdout);
ll n,m,w[Arr_MAX],v[Arr_MAX];
cin>>n>>m;
for (ll i=1;i<=n;i++)
cin>>w[i]>>v[i];
ll f[100][100];
memset(f,0,sizeof(f));// TH cơ sở
//QHD
for (ll i=1;i<=n;i++)
for (ll j=1;j<=m;j++)
{
f[i][j]=f[i-1][j];// giả sử k lấy vật hiện tại
if (j>=w[i])
f[i][j]=max(f[i][j],f[i-1][j-w[i]]+v[i]);//nếu lấy thì = tổng giá trị của túi đã chứa j-w[i] đồ và giá trị hiện tại
}
cout<<f[n][m]<<endl;
//truy vet
while (f[n][m]==f[n][m-1])
--m;
while (n!=0)
{
if (f[n][m]!=f[n-1][m])
{
cout<<n<<" ";
m=m-w[n];
}
else
n=n-1;;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgQXJyX01BWCAxMDAwMDAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG1haW4oKQp7CiAgICBmcmVvcGVuKCJpbi5pbnAiLCJyIixzdGRpbik7CiAgICBmcmVvcGVuKCJvdXQub3V0IiwidyIsc3Rkb3V0KTsKICAgIGxsIG4sbSx3W0Fycl9NQVhdLHZbQXJyX01BWF07CiAgICBjaW4+Pm4+Pm07CiAgICBmb3IgKGxsIGk9MTtpPD1uO2krKykKICAgICAgICBjaW4+PndbaV0+PnZbaV07CiAgICBsbCBmWzEwMF1bMTAwXTsKICAgIG1lbXNldChmLDAsc2l6ZW9mKGYpKTsvLyBUSCBjxqEgc+G7nwogICAgLy9RSEQKICAgIGZvciAobGwgaT0xO2k8PW47aSsrKQogICAgICAgIGZvciAobGwgaj0xO2o8PW07aisrKQogICAgewogICAgICAgICAgICBmW2ldW2pdPWZbaS0xXVtqXTsvLyBnaeG6oyBz4butIGsgbOG6pXkgduG6rXQgaGnhu4duIHThuqFpCiAgICAgICAgICAgIGlmIChqPj13W2ldKQogICAgICAgICAgICAgICAgZltpXVtqXT1tYXgoZltpXVtqXSxmW2ktMV1bai13W2ldXSt2W2ldKTsvL27hur91IGzhuqV5IHRow6wgPSB04buVbmcgZ2nDoSB0cuG7iyBj4bunYSB0w7ppIMSRw6MgY2jhu6lhIGotd1tpXSDEkeG7kyB2w6AgZ2nDoSB0cuG7iyBoaeG7h24gdOG6oWkKICAgIH0KICAgIGNvdXQ8PGZbbl1bbV08PGVuZGw7CiAgICAvL3RydXkgdmV0CiAgICB3aGlsZSAoZltuXVttXT09ZltuXVttLTFdKQogICAgICAgIC0tbTsKICAgIHdoaWxlIChuIT0wKQogICAgewogICAgICAgIGlmIChmW25dW21dIT1mW24tMV1bbV0pCiAgICAgICAgewogICAgICAgICAgICBjb3V0PDxuPDwiICI7CiAgICAgICAgICAgIG09bS13W25dOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgbj1uLTE7OwogICAgfQogICAgcmV0dXJuIDA7Cn0K