#include <algorithm>
#include <cmath>
#include <cstdint>
#include <iostream>
#include <vector>

using ll = int64_t;

// maxl = (n-1)*sum(s)
ll n,maxl;
std::vector<ll>s,lens;
std::vector<std::vector<bool>> dpo;
double ans{-1.0};

void setMaxl(){
    ll sums{};
    for(ll i=1;i<=n;i++){
        sums+=s[i];
    }
    maxl=(n-1)*sums;
}

double getArea(double a,double b,double c){
    double s = (a+b+c)/2;
    return std::sqrt(s*(s-a)*(s-b)*(s-c));
}

int main(){
    std::cin>>n;
    s.resize(n+1);
    for(ll i=1;i<=n;i++){
        std::cin>>s[i];
    }
    for(ll i=1;i<n;i++){
        for(ll j=i+1;j<=n;j++){
            lens.push_back(s[i]+s[j]);
        }
    }
    setMaxl();
    dpo.resize(maxl+1,std::vector<bool>(maxl+1,false));
    dpo[0][0]=true;
    for(ll k=0;k<(ll)lens.size();k++){
        std::vector<std::vector<bool>> dpn(maxl+1,std::vector<bool>(maxl+1,false));
        for(ll i=0;i<=maxl;i++){
            for(ll j=0;j<=maxl;j++){
                if(dpo[i][j]){
                    if(i+lens[k]<=maxl){
                        dpn[i+lens[k]][j]=true;
                    }
                    if(j+lens[k]<=maxl){
                        dpn[i][j+lens[k]]=true;
                    }
                    dpn[i][j]=true;
                }
            }
        }
        dpo=dpn;
    }

    for(ll i=0;i<=maxl;i++){
        for(ll j=0;j<=maxl;j++){
            if(dpo[i][j]){
                ll c = maxl-i-j;
                if(c<maxl/2.0){
                    ans = std::max(ans,getArea(i, j, c));
                }
            }
        }
    }

    if(ans<0){
        std::cout<<-1<<'\n';
    }else{
        std::cout<<ll(ans*10000)<<'\n';
    }
}   