#include <bits/stdc++.h>
#define forn(i,n) for(int i = 0; i < (n); i++)
#define forsn(i,s,n) for(int i = (s); i < (n); i++)
#define sq(x) ((x) * (x))
#define all(v) ((v).begin, (v).end)
#define pb push_back
#define f first
#define s second
#define mp make_pair
#define EPS 1e-10
using namespace std;
typedef pair<int,int> par;
typedef long long int tint;
int w[100100];
vector<int> ans;
/*
// Marsaglia
struct PRNG
{
unsigned int Q[256];
unsigned int x,y,z,w,v,c; // Seed variables
int index;
PRNG()
{
init();
}
void init()
{
x = 123456789, y = 362436069, z = 521288629, w = 88675123, v = 886756453;
srand (time(NULL));
c = rand();
index = 0;
}
void reset()
{
index = 0;
unsigned int aux[5];
forn(i,5)
{
aux[i] = (x^(x>>7)); x=y; y=z; z=w; w=v;
v=(v^(v<<6))^(aux[i]^(aux[i]<<13));
aux[i] = (y+y+1)*v;
}
x = aux[0], y = aux[1], z = aux[2], w = aux[3], v = aux[4];
}
unsigned int xorshift()
{
if(index == RES) reset();
index++;
unsigned int t;
t=(x^(x>>7)); x=y; y=z; z=w; w=v;
v=(v^(v<<6))^(t^(t<<13));
return (y+y+1)*v;
}
unsigned int MWC256()
{
unsigned long long t,a=809430660LL;
static unsigned char i=255;
t=a*Q[++i]+c; c=(t>>32);
return(Q[i]=t);
}
inline int next()
{
return xorshift();
}
inline int next(int M) {
return xorshift() % M;
}
inline int next(int a, int b) {
return a + (xorshift() % (b - a));
}
inline double nextDouble() {
return (xorshift() + 0.5) * (1.0 / 4294967296.0);
}
};
// Mersenne twister
struct RNG {
unsigned int MT[624];
int index;
RNG(int seed = 1) {
init(seed);
}
void init(int seed = 1) {
MT[0] = seed;
forsn(i, 1, 624) MT[i] = (1812433253UL * (MT[i-1] ^ (MT[i-1] >> 30)) + i);
index = 0;
}
void generate() {
const unsigned int MULT[] = {0, 2567483615UL};
forn(i, 227) {
unsigned int y = (MT[i] & 0x8000000UL) + (MT[i+1] & 0x7FFFFFFFUL);
MT[i] = MT[i+397] ^ (y >> 1);
MT[i] ^= MULT[y&1];
}
forsn(i, 227, 623) {
unsigned int y = (MT[i] & 0x8000000UL) + (MT[i+1] & 0x7FFFFFFFUL);
MT[i] = MT[i-227] ^ (y >> 1);
MT[i] ^= MULT[y&1];
}
unsigned int y = (MT[623] & 0x8000000UL) + (MT[0] & 0x7FFFFFFFUL);
MT[623] = MT[623-227] ^ (y >> 1);
MT[623] ^= MULT[y&1];
}
unsigned int rand() {
if (index == 0) {
generate();
}
unsigned int y = MT[index];
y ^= y >> 11;
y ^= y << 7 & 2636928640UL;
y ^= y << 15 & 4022730752UL;
y ^= y >> 18;
index = index == 623 ? 0 : index + 1;
return y;
}
inline int next() {
return rand();
}
inline int next(int x) {
return rand() % x;
}
inline int next(int a, int b) {
return a + (rand() % (b - a));
}
inline double nextDouble() {
return (rand() + 0.5) * (1.0 / 4294967296.0);
}
};
int main()
{
freopen("out.txt", "w", stdout);
//cout << RAND_MAX << endl;
RNG rng(1);
PRNG prng;
//forn(i,10000) cout << rng.nextDouble() << " ";
//cout << endl;
forn(i,100000) cout << prng.nextDouble() << ", ";
return 0;
}
*/
void solve_dp(int n, tint m)
{
bool dp[n+10][m+10]{ };
int prev[n+10][m+10];
fill(*prev, *prev + (n+10)*(m+10), 0);
forn(i,n+1) dp[i][0] = true;
forsn(s,1,m+1)
{
forn(i,n)
{
dp[i+1][s] = dp[i][s];
if(s >= w[i])
{
dp[i+1][s] |= dp[i][s-w[i]];
}
if(dp[i+1][s])
{
if(!dp[i][s]) prev[i+1][s] = i+1;
}
}
}
for(int sum = m; sum >= 0; sum--)
{
if(dp[n][sum])
{
//cout << sum << endl;
int aux = sum;
int ind = n;
while(aux and ind)
{
//cout << ind << " " << aux << " " << prev[ind][aux] << endl;
if(prev[ind][aux] != 0)
{
ans.pb(ind-1);
ind--;
aux -= w[ind];
}
else ind--;
}
break;
}
}
}
int main()
{
int n; tint m;
cin >> m >> n;
forn(i,n) cin >> w[i];
int lim = n;
if(n * m <= (tint)(1e7))
{
solve_dp(n,m);
}
else
{
tint acum = 0;
for(int i = n-1; i >= 0; i--)
{
if(acum + w[i] > m)
{
lim = i;
break;
}
acum += w[i];
}
// something like
solve_dp(lim, m - acum);
}
sort(ans.begin(), ans.end());
forsn(j,lim+1,n) ans.pb(j);
int k = ans.size();
cout << k << endl;
forn(i,k) cout << ans[i] << " ";
cout << endl;
/*
int ch = 0;
forn(i,k) ch += w[ans[i]];
cout << "CHECK" << endl;
cout << ch << endl;
*/
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGZvcm4oaSxuKSBmb3IoaW50IGkgPSAwOyBpIDwgKG4pOyBpKyspCiNkZWZpbmUgZm9yc24oaSxzLG4pIGZvcihpbnQgaSA9IChzKTsgaSA8IChuKTsgaSsrKQojZGVmaW5lIHNxKHgpICgoeCkgKiAoeCkpCiNkZWZpbmUgYWxsKHYpICgodikuYmVnaW4sICh2KS5lbmQpCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgZiBmaXJzdAojZGVmaW5lIHMgc2Vjb25kCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgRVBTIDFlLTEwCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIHBhaXI8aW50LGludD4gcGFyOwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgdGludDsKCmludCB3WzEwMDEwMF07Cgp2ZWN0b3I8aW50PiBhbnM7CgovKgoKLy8gTWFyc2FnbGlhCgpzdHJ1Y3QgUFJORwp7CiAgICB1bnNpZ25lZCBpbnQgUVsyNTZdOwogICAgdW5zaWduZWQgaW50IHgseSx6LHcsdixjOyAvLyBTZWVkIHZhcmlhYmxlcwogICAgaW50IGluZGV4OwoKICAgIFBSTkcoKQogICAgewogICAgICAgIGluaXQoKTsKICAgIH0KCiAgICB2b2lkIGluaXQoKQogICAgewogICAgICAgIHggPSAxMjM0NTY3ODksIHkgPSAzNjI0MzYwNjksIHogPSA1MjEyODg2MjksIHcgPSA4ODY3NTEyMywgdiA9IDg4Njc1NjQ1MzsKICAgICAgICBzcmFuZCAodGltZShOVUxMKSk7CiAgICAgICAgYyA9IHJhbmQoKTsKICAgICAgICBpbmRleCA9IDA7CiAgICB9CgogICAgdm9pZCByZXNldCgpCiAgICB7CiAgICAgICAgaW5kZXggPSAwOwogICAgICAgIHVuc2lnbmVkIGludCBhdXhbNV07CiAgICAgICAgZm9ybihpLDUpCiAgICAgICAgewogICAgICAgICAgICBhdXhbaV0gPSAoeF4oeD4+NykpOyB4PXk7IHk9ejsgej13OyB3PXY7CiAgICAgICAgICAgIHY9KHZeKHY8PDYpKV4oYXV4W2ldXihhdXhbaV08PDEzKSk7IAogICAgICAgICAgICBhdXhbaV0gPSAoeSt5KzEpKnY7CiAgICAgICAgfQogICAgICAgIHggPSBhdXhbMF0sIHkgPSBhdXhbMV0sIHogPSBhdXhbMl0sIHcgPSBhdXhbM10sIHYgPSBhdXhbNF07CiAgICB9CgogICAgdW5zaWduZWQgaW50IHhvcnNoaWZ0KCkKICAgIHsKICAgICAgICBpZihpbmRleCA9PSBSRVMpIHJlc2V0KCk7CgogICAgICAgIGluZGV4Kys7CiAgICAgICAgdW5zaWduZWQgaW50IHQ7CiAgICAgICAgdD0oeF4oeD4+NykpOyB4PXk7IHk9ejsgej13OyB3PXY7CiAgICAgICAgdj0odl4odjw8NikpXih0Xih0PDwxMykpOyAKICAgICAgICByZXR1cm4gKHkreSsxKSp2OwogICAgfQoKICAgIHVuc2lnbmVkIGludCBNV0MyNTYoKQogICAgewogICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0LGE9ODA5NDMwNjYwTEw7CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaT0yNTU7CiAgICAgICAgdD1hKlFbKytpXStjOyBjPSh0Pj4zMik7CiAgICAgICAgcmV0dXJuKFFbaV09dCk7CiAgICB9CgogICAgaW5saW5lIGludCBuZXh0KCkKICAgIHsKICAgICAgICByZXR1cm4geG9yc2hpZnQoKTsKICAgIH0KCiAgICBpbmxpbmUgaW50IG5leHQoaW50IE0pIHsKICAgICAgICByZXR1cm4geG9yc2hpZnQoKSAlIE07CiAgICB9CiAgICAKICAgIGlubGluZSBpbnQgbmV4dChpbnQgYSwgaW50IGIpIHsKICAgICAgICByZXR1cm4gYSArICh4b3JzaGlmdCgpICUgKGIgLSBhKSk7CiAgICB9CiAgICAKICAgIGlubGluZSBkb3VibGUgbmV4dERvdWJsZSgpIHsKICAgICAgICByZXR1cm4gKHhvcnNoaWZ0KCkgKyAwLjUpICogKDEuMCAvIDQyOTQ5NjcyOTYuMCk7CiAgICB9Cn07CgovLyBNZXJzZW5uZSB0d2lzdGVyCgpzdHJ1Y3QgUk5HIHsKICAgIHVuc2lnbmVkIGludCBNVFs2MjRdOwogICAgaW50IGluZGV4OwoJCglSTkcoaW50IHNlZWQgPSAxKSB7CgkJaW5pdChzZWVkKTsKCX0KICAgIAogICAgdm9pZCBpbml0KGludCBzZWVkID0gMSkgewogICAgICAgIE1UWzBdID0gc2VlZDsKICAgICAgICBmb3JzbihpLCAxLCA2MjQpIE1UW2ldID0gKDE4MTI0MzMyNTNVTCAqIChNVFtpLTFdIF4gKE1UW2ktMV0gPj4gMzApKSArIGkpOwogICAgICAgIGluZGV4ID0gMDsKICAgIH0KICAgIAogICAgdm9pZCBnZW5lcmF0ZSgpIHsKICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgTVVMVFtdID0gezAsIDI1Njc0ODM2MTVVTH07CiAgICAgICAgZm9ybihpLCAyMjcpIHsKICAgICAgICAgICAgdW5zaWduZWQgaW50IHkgPSAoTVRbaV0gJiAweDgwMDAwMDBVTCkgKyAoTVRbaSsxXSAmIDB4N0ZGRkZGRkZVTCk7CiAgICAgICAgICAgIE1UW2ldID0gTVRbaSszOTddIF4gKHkgPj4gMSk7CiAgICAgICAgICAgIE1UW2ldIF49IE1VTFRbeSYxXTsKICAgICAgICB9CiAgICAgICAgZm9yc24oaSwgMjI3LCA2MjMpIHsKICAgICAgICAgICAgdW5zaWduZWQgaW50IHkgPSAoTVRbaV0gJiAweDgwMDAwMDBVTCkgKyAoTVRbaSsxXSAmIDB4N0ZGRkZGRkZVTCk7CiAgICAgICAgICAgIE1UW2ldID0gTVRbaS0yMjddIF4gKHkgPj4gMSk7CiAgICAgICAgICAgIE1UW2ldIF49IE1VTFRbeSYxXTsKICAgICAgICB9CiAgICAgICAgdW5zaWduZWQgaW50IHkgPSAoTVRbNjIzXSAmIDB4ODAwMDAwMFVMKSArIChNVFswXSAmIDB4N0ZGRkZGRkZVTCk7CiAgICAgICAgTVRbNjIzXSA9IE1UWzYyMy0yMjddIF4gKHkgPj4gMSk7CiAgICAgICAgTVRbNjIzXSBePSBNVUxUW3kmMV07CiAgICB9CiAgICAKICAgIHVuc2lnbmVkIGludCByYW5kKCkgewogICAgICAgIGlmIChpbmRleCA9PSAwKSB7CiAgICAgICAgICAgIGdlbmVyYXRlKCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHVuc2lnbmVkIGludCB5ID0gTVRbaW5kZXhdOwogICAgICAgIHkgXj0geSA+PiAxMTsKICAgICAgICB5IF49IHkgPDwgNyAgJiAyNjM2OTI4NjQwVUw7CiAgICAgICAgeSBePSB5IDw8IDE1ICYgNDAyMjczMDc1MlVMOwogICAgICAgIHkgXj0geSA+PiAxODsKICAgICAgICBpbmRleCA9IGluZGV4ID09IDYyMyA/IDAgOiBpbmRleCArIDE7CiAgICAgICAgcmV0dXJuIHk7CiAgICB9CiAgICAKICAgIGlubGluZSBpbnQgbmV4dCgpIHsKICAgICAgICByZXR1cm4gcmFuZCgpOwogICAgfQogICAgCiAgICBpbmxpbmUgaW50IG5leHQoaW50IHgpIHsKICAgICAgICByZXR1cm4gcmFuZCgpICUgeDsKICAgIH0KICAgIAogICAgaW5saW5lIGludCBuZXh0KGludCBhLCBpbnQgYikgewogICAgICAgIHJldHVybiBhICsgKHJhbmQoKSAlIChiIC0gYSkpOwogICAgfQogICAgCiAgICBpbmxpbmUgZG91YmxlIG5leHREb3VibGUoKSB7CiAgICAgICAgcmV0dXJuIChyYW5kKCkgKyAwLjUpICogKDEuMCAvIDQyOTQ5NjcyOTYuMCk7CiAgICB9Cn07CgoKaW50IG1haW4oKQp7CiAgICBmcmVvcGVuKCJvdXQudHh0IiwgInciLCBzdGRvdXQpOwoKICAgIC8vY291dCA8PCBSQU5EX01BWCA8PCBlbmRsOwogICAgUk5HIHJuZygxKTsKICAgIFBSTkcgcHJuZzsKCiAgICAvL2Zvcm4oaSwxMDAwMCkgY291dCA8PCBybmcubmV4dERvdWJsZSgpIDw8ICIgIjsKICAgIC8vY291dCA8PCBlbmRsOwogICAgZm9ybihpLDEwMDAwMCkgY291dCA8PCBwcm5nLm5leHREb3VibGUoKSA8PCAiLCAiOwoKICAgIHJldHVybiAwOwp9CiovCgp2b2lkIHNvbHZlX2RwKGludCBuLCB0aW50IG0pCnsKICAgIGJvb2wgZHBbbisxMF1bbSsxMF17IH07CiAgICBpbnQgcHJldltuKzEwXVttKzEwXTsKICAgIAogICAgZmlsbCgqcHJldiwgKnByZXYgKyAobisxMCkqKG0rMTApLCAwKTsKICAgIAogICAgZm9ybihpLG4rMSkgZHBbaV1bMF0gPSB0cnVlOwogICAgCiAgICBmb3JzbihzLDEsbSsxKQogICAgewogICAgICAgIGZvcm4oaSxuKQogICAgICAgIHsKICAgICAgICAgICAgZHBbaSsxXVtzXSA9IGRwW2ldW3NdOwogICAgICAgICAgICBpZihzID49IHdbaV0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRwW2krMV1bc10gfD0gZHBbaV1bcy13W2ldXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZihkcFtpKzFdW3NdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZighZHBbaV1bc10pIHByZXZbaSsxXVtzXSA9IGkrMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgIAogICAgZm9yKGludCBzdW0gPSBtOyBzdW0gPj0gMDsgc3VtLS0pCiAgICB7CiAgICAgICAgaWYoZHBbbl1bc3VtXSkKICAgICAgICB7CiAgICAgICAgICAgIC8vY291dCA8PCBzdW0gPDwgZW5kbDsKICAgICAgICAgICAgaW50IGF1eCA9IHN1bTsKICAgICAgICAgICAgaW50IGluZCA9IG47CiAgICAgICAgICAgIHdoaWxlKGF1eCBhbmQgaW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvL2NvdXQgPDwgaW5kIDw8ICIgIiA8PCBhdXggPDwgIiAiIDw8IHByZXZbaW5kXVthdXhdIDw8IGVuZGw7CiAgICAgICAgICAgICAgICBpZihwcmV2W2luZF1bYXV4XSAhPSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGFucy5wYihpbmQtMSk7CiAgICAgICAgICAgICAgICAgICAgaW5kLS07CiAgICAgICAgICAgICAgICAgICAgYXV4IC09IHdbaW5kXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaW5kLS07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9CgoKaW50IG1haW4oKQp7CiAgICBpbnQgbjsgdGludCBtOwoJCgljaW4gPj4gbSA+PiBuOwoJZm9ybihpLG4pIGNpbiA+PiB3W2ldOwoJCgkKCWludCBsaW0gPSBuOwoJCglpZihuICogbSA8PSAodGludCkoMWU3KSkKCXsKCSAgIHNvbHZlX2RwKG4sbSk7Cgl9CgllbHNlCgl7CgkgICAgdGludCBhY3VtID0gMDsKCSAgICAKCSAgICBmb3IoaW50IGkgPSBuLTE7IGkgPj0gMDsgaS0tKQoJICAgIHsKCSAgICAgICAgaWYoYWN1bSArIHdbaV0gPiBtKQoJICAgICAgICB7CgkgICAgICAgICAgICBsaW0gPSBpOwoJICAgICAgICAgICAgYnJlYWs7CgkgICAgICAgIH0KCSAgICAgICAgYWN1bSArPSB3W2ldOwoJICAgIH0KCSAgICAvLyBzb21ldGhpbmcgbGlrZSAKCSAgICBzb2x2ZV9kcChsaW0sIG0gLSBhY3VtKTsKCX0KCQoJc29ydChhbnMuYmVnaW4oKSwgYW5zLmVuZCgpKTsKCWZvcnNuKGosbGltKzEsbikgYW5zLnBiKGopOwoJaW50IGsgPSBhbnMuc2l6ZSgpOwoJY291dCA8PCBrIDw8IGVuZGw7Cglmb3JuKGksaykgY291dCA8PCBhbnNbaV0gPDwgIiAiOwoJY291dCA8PCBlbmRsOwoJLyoKCWludCBjaCA9IDA7Cglmb3JuKGksaykgY2ggKz0gd1thbnNbaV1dOwoJY291dCA8PCAiQ0hFQ0siIDw8IGVuZGw7Cgljb3V0IDw8IGNoIDw8IGVuZGw7CgkqLwoJcmV0dXJuIDA7Cn0=