#include <iostream>
#include <vector>
using namespace std;
struct node{
int data;
int start;
int sum;
};
int main() {
int n;
scanf("%d",&n);
vector<node>dp(n);
int start=0,end=n-1,maxsum=-1;
for(int i=0;i<n;++i){
scanf("%d",&dp[i].data);
if(i==0) dp[0].sum=dp[0].data;
if(i>0){
if(dp[i-1].sum>0) {
dp[i].sum=dp[i-1].sum+dp[i].data;
dp[i].start=dp[i-1].start;
}else{
dp[i].sum=dp[i].data;
dp[i].start=i;
}
}
}
for(int i=0;i<n;++i){
if(dp[i].sum>maxsum) {
end=i;
maxsum=dp[i].sum;
start=dp[i].start;
}
}
if(maxsum<0) maxsum=0;
printf("%d %d %d",maxsum,dp[start].data,dp[end].data);
return 0;
}