#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=