#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,ans[1010],a[1010],b[1010],sum,ti[1010];
struct node//三元组结构
{
int o;//工作编号
int t;//时间
int ab;//在哪个机器
}job[1010];
int cmp(const node &x,const node &y)
{
return x.t<y.t;
}
void Johnson()
{
int i;
for(i=1;i<=n;i++)//生成三元组表job
if(a[i]<b[i])
{
job[i].ab=0;
job[i].o=i;
job[i].t=a[i];
}
else
{
job[i].ab=1;
job[i].o=i;
job[i].t=b[i];
}
sort(job+1,job+1+n,cmp);//排序(按t由小到大)
int l=0,r=n+1;
for(i=1;i<=n;i++)//生成最优解
if(job[i].ab==0)ans[++l]=job[i].o;
else ans[--r]=job[i].o;
}
int main()
{
cin>>n;
int i;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
cin>>b[i];
Johnson();//生成最优解
for(i=1;i<=n;i++)//计算最少时间
ti[i]=ti[i-1]+a[ans[i]];
sum=ti[1]+b[ans[1]];
for(i=2;i<=n;i++)
sum=max(sum,ti[i])+b[ans[i]];
cout<<sum;
return 0;
}