#include<bits/stdc++.h>
using namespace std;
bool dp[1000005]; 
int main(){
	int n,sum=0,x;
	cin>>n;
	dp[0]=1;
	while(n--){
		scanf("%d",&x);
		for(int i=sum+x;i>=x;i--){
			dp[i]|=dp[i-x];
		}
		sum+=x;
	}
	int ans=sum;
	for(int i=0;i<=sum;i++)
		if(dp[i])ans=min(ans,max(i,sum-i));
	printf("%d\n",ans);
	return 0;
}
#include <iostream>
#include <vector>

int main()
{
  int N;
  std::cin>>N;
  
  std::vector<int64_t>T;
  for(int i=0;i<N;i++)
  {
    int64_t t;
    std::cin>>t;
    T.push_back(t);
  }
  
  int sum=0;
  for(auto e:T)sum+=e;
  
  bool g[101][100001]{0};
  g[0][0]=true;
  for(int i=0;i<=N-1;i++)
  {
    for(int64_t j=0;j<=sum;j++)
    {
      if(j-T[i]>=0)
      {
        g[i+1][j]=g[i][j]|g[i][j-T[i]];
      }
      else
      {
        g[i+1][j]=g[i][j];
      }
    }
  }
  
  int64_t res=0;
  for(int64_t i=sum/2+(sum%2);i<=sum;i++)
  {
    if(g[N][i])
    {
      res=i;
      break;
    }
  }
  
  std::cout<<res<<std::endl;
  
  return 0;
}