#include<bits/stdc++.h>
using namespace std;
#define maxn 100020
#define rep(i,l,r) for(register int i = l ; i <= r ; i++)
#define repd(i,r,l) for(register int i = r ; i >= l ; i--)
#define rvc(i,S) for(register int i = 0 ; i < (int)S.size() ; i++)
#define rvcd(i,S) for(register int i = ((int)S.size()) - 1 ; i >= 0 ; i--)
#define fore(i,x)for (register int i = head[x] ; i ; i = e[i].next)
#define pb push_back
#define prev prev_
#define stack stack_
#define mp make_pair
#define fi first
#define se second
#define inf 1e18
typedef long long ll;
typedef pair<int,int> pr;
int a[maxn],n;
ll sum[maxn],ans;
inline ll cal(ll a,ll b,ll c,ll d){
return max(max(a,b),max(c,d)) - min(min(a,b),min(c,d));
}
int main(){
scanf("%d",&n);
rep(i,1,n) scanf("%d",&a[i]), sum[i] = sum[i - 1] + a[i];
int l = 1 , r = 2;
ans = inf;
rep(i,2,n - 1){
while ( l < i && sum[l] < sum[i] - sum[l] ) l++;
while ( r < n && sum[r] - sum[i] < sum[n] - sum[r] ) r++;
ans = min(ans,cal(sum[l],sum[i] - sum[l],sum[r] - sum[i],sum[n] - sum[r]));
if ( l > 1 ) ans = min(ans,cal(sum[l - 1],sum[i] - sum[l - 1],sum[r] - sum[i],sum[n] - sum[r]));
if ( r > i + 1 ) ans = min(ans,cal(sum[l],sum[i] - sum[l],sum[r - 1] - sum[i],sum[n] - sum[r - 1]));
if ( l > 1 && r > i + 1 ) ans = min(ans,cal(sum[l - 1],sum[i] - sum[l - 1],sum[r - 1] - sum[i],sum[n] - sum[r - 1]));
}
cout<<ans<<endl;
}