#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int INF = 1e9;
struct Seg {
int n;
vector<pair<int,int>> st;
Seg(int _n=0){ init(_n); }
void init(int _n){
n = 1;
while(n < _n) n <<= 1;
st.assign(2*n, {INF, INF});
}
void setmin(int pos, pair<int,int> val){
pos += n;
if(val < st[pos]) st[pos] = val;
else return;
pos >>= 1;
while(pos){
st[pos] = min(st[pos<<1], st[(pos<<1)|1]);
pos >>= 1;
}
}
pair<int,int> query(int l, int r){
if(l > r) return {INF, INF};
l += n; r += n;
pair<int,int> res = {INF, INF};
while(l <= r){
if(l & 1) res = min(res, st[l++]);
if(!(r & 1)) res = min(res, st[r--]);
l >>= 1; r >>= 1;
}
return res;
}
};
vector<int> compute_dp(int n, const vector<ll>& a, ll m){
vector<ll> pref(n+1);
pref[0]=0;
for(int i=1;i<=n;i++) pref[i]=pref[i-1]+a[i];
vector<ll> vals = pref;
for(int i=0;i<=n;i++) vals.push_back(pref[i]-m);
sort(vals.begin(), vals.end());
vals.erase(unique(vals.begin(), vals.end()), vals.end());
auto posOf = [&](ll x){ return int(lower_bound(vals.begin(), vals.end(), x) - vals.begin()); };
int sz = (int)vals.size();
Seg seg(sz);
vector<int> dp(n+1, INF);
dp[0]=0;
seg.setmin(posOf(pref[0]), {0, 0});
for(int r=1;r<=n;r++){
int idx = posOf(pref[r]-m);
auto best = seg.query(idx, sz-1);
if(best.first < INF) dp[r] = best.first + 1;
if(dp[r] < INF) seg.setmin(posOf(pref[r]), {dp[r], r});
}
return dp;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
long long m;
if(!(cin>>n>>m)) return 0;
vector<ll> a(n+1);
for(int i=1;i<=n;i++) cin>>a[i];
auto dp_f = compute_dp(n, a, m);
int k = dp_f[n];
vector<ll> b(n+1);
for(int i=1;i<=n;i++) b[i] = a[n-i+1];
auto dp_rev = compute_dp(n, b, m);
vector<int> suf_dp(n+2, INF);
suf_dp[n+1]=0;
for(int i=1;i<=n;i++) suf_dp[i] = dp_rev[n-i+1];
vector<int> cuts;
int cur = 1;
int seg_left = k;
while(seg_left > 1){
int choose = -1;
ll sum = 0;
for(int i=cur;i<=n;i++){
sum += a[i];
if(sum <= m && suf_dp[i+1] == seg_left - 1){
choose = i;
break;
}
}
if(choose == -1) break;
cuts.push_back(choose);
cur = choose + 1;
seg_left--;
}
cout << k << "\n";
for(size_t i=0;i<cuts.size();i++){
if(i) cout << " ";
cout << cuts[i];
}
cout << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwpjb25zdCBpbnQgSU5GID0gMWU5OwoKc3RydWN0IFNlZyB7CiAgICBpbnQgbjsKICAgIHZlY3RvcjxwYWlyPGludCxpbnQ+PiBzdDsKICAgIFNlZyhpbnQgX249MCl7IGluaXQoX24pOyB9CiAgICB2b2lkIGluaXQoaW50IF9uKXsKICAgICAgICBuID0gMTsKICAgICAgICB3aGlsZShuIDwgX24pIG4gPDw9IDE7CiAgICAgICAgc3QuYXNzaWduKDIqbiwge0lORiwgSU5GfSk7CiAgICB9CiAgICB2b2lkIHNldG1pbihpbnQgcG9zLCBwYWlyPGludCxpbnQ+IHZhbCl7CiAgICAgICAgcG9zICs9IG47CiAgICAgICAgaWYodmFsIDwgc3RbcG9zXSkgc3RbcG9zXSA9IHZhbDsKICAgICAgICBlbHNlIHJldHVybjsKICAgICAgICBwb3MgPj49IDE7CiAgICAgICAgd2hpbGUocG9zKXsKICAgICAgICAgICAgc3RbcG9zXSA9IG1pbihzdFtwb3M8PDFdLCBzdFsocG9zPDwxKXwxXSk7CiAgICAgICAgICAgIHBvcyA+Pj0gMTsKICAgICAgICB9CiAgICB9CiAgICBwYWlyPGludCxpbnQ+IHF1ZXJ5KGludCBsLCBpbnQgcil7CiAgICAgICAgaWYobCA+IHIpIHJldHVybiB7SU5GLCBJTkZ9OwogICAgICAgIGwgKz0gbjsgciArPSBuOwogICAgICAgIHBhaXI8aW50LGludD4gcmVzID0ge0lORiwgSU5GfTsKICAgICAgICB3aGlsZShsIDw9IHIpewogICAgICAgICAgICBpZihsICYgMSkgcmVzID0gbWluKHJlcywgc3RbbCsrXSk7CiAgICAgICAgICAgIGlmKCEociAmIDEpKSByZXMgPSBtaW4ocmVzLCBzdFtyLS1dKTsKICAgICAgICAgICAgbCA+Pj0gMTsgciA+Pj0gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlczsKICAgIH0KfTsKCnZlY3RvcjxpbnQ+IGNvbXB1dGVfZHAoaW50IG4sIGNvbnN0IHZlY3RvcjxsbD4mIGEsIGxsIG0pewogICAgdmVjdG9yPGxsPiBwcmVmKG4rMSk7CiAgICBwcmVmWzBdPTA7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgcHJlZltpXT1wcmVmW2ktMV0rYVtpXTsKICAgIHZlY3RvcjxsbD4gdmFscyA9IHByZWY7CiAgICBmb3IoaW50IGk9MDtpPD1uO2krKykgdmFscy5wdXNoX2JhY2socHJlZltpXS1tKTsKICAgIHNvcnQodmFscy5iZWdpbigpLCB2YWxzLmVuZCgpKTsKICAgIHZhbHMuZXJhc2UodW5pcXVlKHZhbHMuYmVnaW4oKSwgdmFscy5lbmQoKSksIHZhbHMuZW5kKCkpOwogICAgYXV0byBwb3NPZiA9IFsmXShsbCB4KXsgcmV0dXJuIGludChsb3dlcl9ib3VuZCh2YWxzLmJlZ2luKCksIHZhbHMuZW5kKCksIHgpIC0gdmFscy5iZWdpbigpKTsgfTsKICAgIGludCBzeiA9IChpbnQpdmFscy5zaXplKCk7CiAgICBTZWcgc2VnKHN6KTsKICAgIHZlY3RvcjxpbnQ+IGRwKG4rMSwgSU5GKTsKICAgIGRwWzBdPTA7CiAgICBzZWcuc2V0bWluKHBvc09mKHByZWZbMF0pLCB7MCwgMH0pOwogICAgZm9yKGludCByPTE7cjw9bjtyKyspewogICAgICAgIGludCBpZHggPSBwb3NPZihwcmVmW3JdLW0pOwogICAgICAgIGF1dG8gYmVzdCA9IHNlZy5xdWVyeShpZHgsIHN6LTEpOwogICAgICAgIGlmKGJlc3QuZmlyc3QgPCBJTkYpIGRwW3JdID0gYmVzdC5maXJzdCArIDE7CiAgICAgICAgaWYoZHBbcl0gPCBJTkYpIHNlZy5zZXRtaW4ocG9zT2YocHJlZltyXSksIHtkcFtyXSwgcn0pOwogICAgfQogICAgcmV0dXJuIGRwOwp9CgppbnQgbWFpbigpewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIGludCBuOwogICAgbG9uZyBsb25nIG07CiAgICBpZighKGNpbj4+bj4+bSkpIHJldHVybiAwOwogICAgdmVjdG9yPGxsPiBhKG4rMSk7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgY2luPj5hW2ldOwoKICAgIGF1dG8gZHBfZiA9IGNvbXB1dGVfZHAobiwgYSwgbSk7CiAgICBpbnQgayA9IGRwX2Zbbl07CgogICAgdmVjdG9yPGxsPiBiKG4rMSk7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgYltpXSA9IGFbbi1pKzFdOwogICAgYXV0byBkcF9yZXYgPSBjb21wdXRlX2RwKG4sIGIsIG0pOwogICAgdmVjdG9yPGludD4gc3VmX2RwKG4rMiwgSU5GKTsKICAgIHN1Zl9kcFtuKzFdPTA7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgc3VmX2RwW2ldID0gZHBfcmV2W24taSsxXTsKCiAgICB2ZWN0b3I8aW50PiBjdXRzOwogICAgaW50IGN1ciA9IDE7CiAgICBpbnQgc2VnX2xlZnQgPSBrOwogICAgd2hpbGUoc2VnX2xlZnQgPiAxKXsKICAgICAgICBpbnQgY2hvb3NlID0gLTE7CiAgICAgICAgbGwgc3VtID0gMDsKICAgICAgICBmb3IoaW50IGk9Y3VyO2k8PW47aSsrKXsKICAgICAgICAgICAgc3VtICs9IGFbaV07CiAgICAgICAgICAgIGlmKHN1bSA8PSBtICYmIHN1Zl9kcFtpKzFdID09IHNlZ19sZWZ0IC0gMSl7CiAgICAgICAgICAgICAgICBjaG9vc2UgPSBpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoY2hvb3NlID09IC0xKSBicmVhazsKICAgICAgICBjdXRzLnB1c2hfYmFjayhjaG9vc2UpOwogICAgICAgIGN1ciA9IGNob29zZSArIDE7CiAgICAgICAgc2VnX2xlZnQtLTsKICAgIH0KCiAgICBjb3V0IDw8IGsgPDwgIlxuIjsKICAgIGZvcihzaXplX3QgaT0wO2k8Y3V0cy5zaXplKCk7aSsrKXsKICAgICAgICBpZihpKSBjb3V0IDw8ICIgIjsKICAgICAgICBjb3V0IDw8IGN1dHNbaV07CiAgICB9CiAgICBjb3V0IDw8ICJcbiI7CiAgICByZXR1cm4gMDsKfQo=