//又是一个背包题目啊,这个题目并不难,自己还是要多想想,把F【】数组的数据开大点 开小了容易wa
#include <stdio.h>
#include <string.h>
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int f[500005];
int main()
{
int n,m,v[5005],i,j,k,cnt,a,sum;
while(scanf("%d",&n)!=EOF)
{
if(n<=0)
break;
memset(f,0,sizeof(f));
cnt=0;
sum=0;
for(i=0;i<n;i++)
{
scanf("%d%d",&a,&m);
for(j=0;j<m;j++)
{
v[cnt++]=a;
sum=sum+a;
}
}
for(i=0;i<cnt;i++)
{
for(j=sum/2;j>=0;j--)
{
if(j>=v[i])
{
f[j]=max(f[j],f[j-v[i]]+v[i]);
}
}
}
printf("%d %d\n",sum-f[sum/2],f[sum/2]);
}
return 0;
}