#include <cstdio>
#include <algorithm>
#include <set>

int n, m, S[300001], ans, st, sum, D[300001];
std::multiset<int> My;

int max(int a, int b) { return a>b?a:b; }

int main()
{
    FILE *out = fopen(".3.out","w");
    freopen(".3.in", "r", stdin);
    scanf("%d%d", &n, &m);
    for(int i = 0 ; i < n ; i++ )
        scanf("%d", S+i), D[i+1] = D[i]+S[i];
    for(int k = 0 ; k < n ; k++ )
    {
        for(int st = k-1 ; st >= 0 && sum < m ; st-- ) sum += S[st];
        if( st < 0 ) st = 0;
        if( sum >= m ) st++;
        for(int i = st, j = k+1 ; i < k ; sum-=S[i], i++)
        {
            while( j < n && sum < m ) sum += S[j], j++;
            if( sum - S[j-1] < m )
            {
                sum-=S[--j];
                ans = max( ans, sum );
            }
        }
    }
    printf("%d\n", ans);

 /*

        for(int i = 0, j = 0 ; i < n ; sum-=S[i], My.erase(S[i]), i++)
        {
            while( j < n && sum < m ) sum += S[j], My.insert(S[j]), j++;
            ans = max( ans, sum - *std::upper_bound(My.begin(), My.end(), sum-m) );
        }
*/


    fprintf(out, "%d\n", ans);

    ans = 0;
    for(int i = 1 ; i <= n ; i++ )
        if( i == 1 ) D[i] = S[i-1];
        else D[i] = D[i-1] + S[i-1];
    for(int i = 1 ; i <= n-1 ; i++ )
    {
        for(int j = i+1 ; j <= n ; j++ )
        {
            sum = D[j]-D[i-1];
            for(int k = i ; k <= j ; k++ )
                if( sum - S[k-1] < m )
                {
                    if( ans < (sum-S[k-1]) )
                    {
                        ans = sum-S[k-1];
                        printf("%d %d %d\n", i, j, k);
                    }
                }
        }
    }
    printf("%d\n", ans);
}

/*
16 777
12 998 75 36 112 155 95 337 777 10 1212 987 75 14 99 123123

6 14
7 1 9 5 1 1

*/
