//此题挺简单的,只需要明白其等于0时不只只有全部为负数的情况!可能其中有些为0!此时肯定取第一个为0当最大值!即输出0 0 0
#include <cstdio>
using namespace std;
int main()
{
int n,a[100007]={0},f = 0;//f特判是否全为0
int ml = 1,mr = 1,max = 0,nowl = 1,nowr = 1,sum = 0;
scanf("%d",&n);
for (int i = 1; i <= n; i++)
{
scanf("%d",&a[i]);
sum += a[i];
if (a[i]>=0) f = 1;
if (sum < 0)
{
sum = 0; nowl = i+1;//因为此时已经炸了l直接加1
}
else
{
nowr = i;//更新r
if (max < sum)//每次sum大于就判一次
{
max = sum;
ml = nowl;
mr = nowr;
}
}
}
if (!max && !f) printf("0 %d %d",a[1],a[n]);
else if (!max && f) printf("0 0 0");
else
printf("%d %d %d",max,a[ml],a[mr]);
return 0;
}