f[0][0]=0;
for(int i=1;i<=n;i++){
now^=1;
for(int j=200000;j>=-200000;j--){
f[j][now]=max(f[j][now],f[j-a[i]][now^1]+b[i]);
}
}
int ans=0;
for(int i=0;i<=200000;i++){
if(f[i][now]>=0)ans=max(ans,f[i][now]+i);
}
cout<<ans<<endl;
and
f[0]=f[0]=0;
for(int i=1;i<=n;i++){
if(a[i]>=0)for(int j=200000;j>=-200000;j--){
f[j]=max(f[j],f[j-a[i]]+b[i]);
}
else for(int j=-200000;j<=200000;j++){
f[j]=max(f[j],f[j-a[i]]+b[i]);
}
}
int ans=0;
for(int i=0;i<=200000;i++){
if(f[i]>=0)ans=max(ans,f[i]+i);
}
cout<<ans<<endl;