#include<bits/stdc++.h>
using namespace std;
struct node
{
int ta,tb,w;
char ch;
node(int ta=0,int tb=0,int w=0,char ch=' '):ta(ta),tb(tb),w(w),ch(ch){}
bool operator<(const node &a) const
{
return w<a.w;
}
};
const int maxn=1005;
int n,q[maxn];
node m[maxn];
void init()
{
int i;
scanf("%d",&n);
for (i=1;i<=n;++i)
scanf("%d",&m[i].ta);
for (i=1;i<=n;++i)
{
scanf("%d",&m[i].tb);
if (m[i].ta<m[i].tb)
{
m[i].w=m[i].ta;
m[i].ch='a';
}
else
{
m[i].w=m[i].tb;
m[i].ch='b';
}
}
sort(m+1,m+n+1);
}
void work()
{
int h=1,t=n;
for(int i=1;i<=n;++i)
{
if (m[i].ch=='a')
{
q[h]=i;
h++;
}
else
{
q[t]=i;
t--;
}
}
int sa=0,sb=0,i=1,j=0;
sa=sb=m[q[1]].ta;
do
{
i++;
j++;
if(sa+m[q[i]].ta>=sb+m[q[j]].tb)
{
sa+=m[q[i]].ta;
sb=sa;
}
else
{
sa+=m[q[i]].ta;
sb+=m[q[j]].tb;
}
}
while(i!=n&&j!=n-1);
printf("%d",sb+m[q[n]].tb);
}
int main()
{
init();
work();
return 0;
}
using namespace std;
struct node
{
int ta,tb,w;
char ch;
node(int ta=0,int tb=0,int w=0,char ch=' '):ta(ta),tb(tb),w(w),ch(ch){}
bool operator<(const node &a) const
{
return w<a.w;
}
};
const int maxn=1005;
int n,q[maxn];
node m[maxn];
void init()
{
int i;
scanf("%d",&n);
for (i=1;i<=n;++i)
scanf("%d",&m[i].ta);
for (i=1;i<=n;++i)
{
scanf("%d",&m[i].tb);
if (m[i].ta<m[i].tb)
{
m[i].w=m[i].ta;
m[i].ch='a';
}
else
{
m[i].w=m[i].tb;
m[i].ch='b';
}
}
sort(m+1,m+n+1);
}
void work()
{
int h=1,t=n;
for(int i=1;i<=n;++i)
{
if (m[i].ch=='a')
{
q[h]=i;
h++;
}
else
{
q[t]=i;
t--;
}
}
int sa=0,sb=0,i=1,j=0;
sa=sb=m[q[1]].ta;
do
{
i++;
j++;
if(sa+m[q[i]].ta>=sb+m[q[j]].tb)
{
sa+=m[q[i]].ta;
sb=sa;
}
else
{
sa+=m[q[i]].ta;
sb+=m[q[j]].tb;
}
}
while(i!=n&&j!=n-1);
printf("%d",sb+m[q[n]].tb);
}
int main()
{
init();
work();
return 0;
}