// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

const int maxn=2e5+25;

#define ll long long int

#define INF 0x3f3f3f3f

int n;

int a[maxn];

ll sum[maxn];

ll b[5];

int main()

{

    int n;

    scanf("%d",&n);

    memset(sum,0,sizeof sum);

    for(int i=1;i<=n;i++){

        scanf("%d",&a[i]);

        sum[i]=sum[i-1]+a[i];

    }

    ll ans=-1;

    for(int i=2;i<=n-1;i++){

        ll s1=sum[i];

        ll s2=sum[n]-sum[i];

        ll x1,x2,y1,y2;

        ll av1=s1/2;ll av2=s2/2;

        // 1.0

        x1=lower_bound(sum+1,sum+i+1,av1)-sum;

        y1=lower_bound(sum+i+2,sum+1+n,s1+av2)-sum;

       // cout<<x1<<" "<<y1<<endl;

        b[1]=sum[x1];

        b[2]=s1-sum[x1];

        b[3]=sum[y1]-s1;

        b[4]=s2-b[3];

        //cout<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;

        sort(b+1,b+5);

        //cout<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;

        if(ans==-1){

            ans=abs(b[4]-b[1]);

        }

        ans=min(ans,abs(b[4]-b[1]));

        //cout<<ans<<endl;





        x1=lower_bound(sum+1,sum+i+1,av1)-sum;

        y1=lower_bound(sum+i+2,sum+1+n,s1+av2)-sum;

       // cout<<x1<<" "<<y1<<endl;

        x1--;y1--;

        b[1]=sum[x1];

        b[2]=s1-sum[x1];

        b[3]=sum[y1]-s1;

        b[4]=s2-b[3];

        //cout<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;

        sort(b+1,b+5);

        //cout<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;

        if(ans==-1){

            ans=abs(b[4]-b[1]);

        }

        ans=min(ans,abs(b[4]-b[1]));







        x1=lower_bound(sum+1,sum+i+1,av1)-sum;

        y1=lower_bound(sum+i+2,sum+1+n,s1+av2)-sum;

       // cout<<x1<<" "<<y1<<endl;

        x1--;

        b[1]=sum[x1];

        b[2]=s1-sum[x1];

        b[3]=sum[y1]-s1;

        b[4]=s2-b[3];

        //cout<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;

        sort(b+1,b+5);

        //cout<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;

        if(ans==-1){

            ans=abs(b[4]-b[1]);

        }

        ans=min(ans,abs(b[4]-b[1]));





        x1=lower_bound(sum+1,sum+i+1,av1)-sum;

        y1=lower_bound(sum+i+2,sum+1+n,s1+av2)-sum;

       // cout<<x1<<" "<<y1<<endl;

        y1--;

        b[1]=sum[x1];

        b[2]=s1-sum[x1];

        b[3]=sum[y1]-s1;

        b[4]=s2-b[3];

        //cout<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;

        sort(b+1,b+5);

        //cout<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;

        if(ans==-1){

            ans=abs(b[4]-b[1]);

        }

        ans=min(ans,abs(b[4]-b[1]));



        //2.0

        av1=s1/2;av2=s2/2;

        x1=upper_bound(sum+1,sum+i+1,av1)-sum;

        y1=lower_bound(sum+i+2,sum+1+n,s1+av2)-sum;

       // cout<<x1<<" "<<y1<<endl;

        b[1]=sum[x1];

        b[2]=s1-sum[x1];

        b[3]=sum[y1]-s1;

        b[4]=s2-b[3];

        //cout<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;

        sort(b+1,b+5);

        //cout<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;

        if(ans==-1){

            ans=abs(b[4]-b[1]);

        }

        ans=min(ans,abs(b[4]-b[1]));



        //3.0

        av1=s1/2;av2=s2/2;

        x1=lower_bound(sum+1,sum+i+1,av1)-sum;

        y1=upper_bound(sum+i+2,sum+1+n,s1+av2)-sum;

       // cout<<x1<<" "<<y1<<endl;

        b[1]=sum[x1];

        b[2]=s1-sum[x1];

        b[3]=sum[y1]-s1;

        b[4]=s2-b[3];

        //cout<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;

        sort(b+1,b+5);

        //cout<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;

        if(ans==-1){

            ans=abs(b[4]-b[1]);

        }

        ans=min(ans,abs(b[4]-b[1]));



        //4.0

        av1=s1/2;av2=s2/2;

        x1=upper_bound(sum+1,sum+i+1,av1)-sum;

        y1=upper_bound(sum+i+2,sum+1+n,s1+av2)-sum;

       // cout<<x1<<" "<<y1<<endl;

        b[1]=sum[x1];

        b[2]=s1-sum[x1];

        b[3]=sum[y1]-s1;

        b[4]=s2-b[3];

        //cout<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;

        sort(b+1,b+5);

        //cout<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;

        if(ans==-1){

            ans=abs(b[4]-b[1]);

        }

        ans=min(ans,abs(b[4]-b[1]));



    }

    printf("%lld\n",ans);

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 1.4486094751576926x):
#include <cstdio>

#include <cstring>

#include <algorithm>

using namespace std;

const int maxn=2e5+100;

typedef long long LL;

int n;

LL a[maxn],p[5];



int main(int argc, char const *argv[])

{

    while (scanf("%d",&n)!=EOF)

    {

        memset(a,0,sizeof(a));

        for (int i=1;i<=n;i++)

        {

            scanf("%lld",&a[i]);

            a[i]+=a[i-1];

        }



        LL ans=3e14;

        for (int i=2;i<=n-1;i++)

        {

            int x=lower_bound(a+1,a+i+1,a[i]/2)-a;

            int y=lower_bound(a+1,a+n+1,a[i]+(a[n]-a[i])/2)-a;

            if (x!=1) x--;

            if (y!=i+1) y--;



            p[0]=a[x];

            p[1]=a[i]-a[x];

            p[2]=a[y]-a[i];

            p[3]=a[n]-a[y];

            ans=min(ans,abs(max(p[0],max(p[1],max(p[2],p[3])))-min(p[0],min(p[1],min(p[2],p[3])))));



            int x1=x+1,y1=y;

            p[0]=a[x1];

            p[1]=a[i]-a[x1];

            p[2]=a[y1]-a[i];

            p[3]=a[n]-a[y1];

            ans=min(ans,abs(max(p[0],max(p[1],max(p[2],p[3])))-min(p[0],min(p[1],min(p[2],p[3])))));



            int x2=x,y2=y+1;

            p[0]=a[x2];

            p[1]=a[i]-a[x2];

            p[2]=a[y2]-a[i];

            p[3]=a[n]-a[y2];

            ans=min(ans,abs(max(p[0],max(p[1],max(p[2],p[3])))-min(p[0],min(p[1],min(p[2],p[3])))));



            int x3=x+1,y3=y+1;

            p[0]=a[x3];

            p[1]=a[i]-a[x3];

            p[2]=a[y3]-a[i];

            p[3]=a[n]-a[y3];

            ans=min(ans,abs(max(p[0],max(p[1],max(p[2],p[3])))-min(p[0],min(p[1],min(p[2],p[3])))));

        }

        printf("%lld\n", ans);

    }

    return 0;

}