#include<stdio.h>
#include<limits.h>
#define BUF_SIZE 11718*2
void read(char *filename, int *n, int **v)
{
FILE *f = fopen(filename,"rb");
int i;
char *buf = (char*)malloc(BUF_SIZE);
setbuf(f,buf);
fscanf(f,"%d",n);
*v = (int*) malloc(*n * sizeof(int));
for(i = 0; i< *n; ++i)
fscanf(f,"%d",(*v)+i);
fclose(f);
free(buf);
}
void find(int *start, int *end,int *sum, int *v, int n)
{
int st1, st2, dr1, dr2;
int sum1 = -INT_MAX, sum2 = -INT_MAX,sumc;
int m = n/2;
*start = *end = n/2;
if(n <= 0){
*sum = -INT_MAX;
return;
}
if(m > 0){
find(&st1, &dr1, &sum1, v, m);
find(&st2, &dr2, &sum2, v+m, n-m);
}
sumc = *(v+m);
*sum = sumc;
if(sum2 > sum1){
sum1 = sum2;
st1 = st2;
dr1 = dr2;
}
for(dr2 = m+1; dr2 < n; ++dr2){
sumc += *(v+dr2);
if(sumc > *sum){
*sum = sumc;
*end = dr2;
}
}
sumc = *sum;
for(st2 = m-1; st2 >=0; --st2){
sumc += *(v+st2);
if(sumc > *sum){
*sum = sumc;
*start = st2;
}
}
if(sum1 > *sum){
*sum = sum1;
*start = st1;
*end = dr1;
}
}
int main()
{
int n, *v;
int i;
int start, end, sum;
start = end = sum = 0;
FILE *f = fopen("ssm.out","w");
read("ssm.in",&n,&v);
find(&start, &end, &sum, v, n);
fprintf(f,"%d %d %d\n",sum, start+1, end+1);
fflush(stdout);
fclose(f);
free(v);
return 0;
}