#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5010;
int v[MAXN];
long long s[MAXN], pre[MAXN];
pair<int, int> re[MAXN];
int N;
struct elem {
  int d0, d1, d2;
  elem(int x, int y, int z) : d0(x), d1(y), d2(z) {}
};
int main() {
  scanf("%d", &N);
  s[0] = 0;
  for (int i = 0; i < N; ++i) {
    scanf("%d", &v[i]);
    if (i > 0) s[i] = s[i - 1] + v[i - 1];
  }
  s[N] = s[N - 1] + v[N - 1];
  pre[N] = 0;
  re[N] = make_pair(N, N);
  for (int i = N - 1; i >= 0; --i) {
    long long best = pre[i + 1];
    pair<int, int> br = re[i + 1];
    for (int j = i; j <= N; ++j) {
      if (s[j] - s[i] > best) {
        best = s[j] - s[i];
        br = make_pair(i, j);
      }
    }
    pre[i] = best;
    re[i] = br;
  }
  long long best = LLONG_MIN;
  elem br(0, 0, 0);
  for (int i = 0; i <= N; ++i) {
    long long cand = s[i] + pre[i];
    if (cand > best) {
      best = cand;
      br = elem(i, re[i].first, re[i].second);
    }
  }
  printf("%d %d %d\n", br.d0, br.d1, br.d2);
  return 0;
}
