#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
int dp[15000],t,sum;
/*void bagg01(int value,int cost)
{
for (int i=t;i>=cost;--i)
dp[i]=(dp[i]+dp[i-cost])%10000;
}
void baggall(int value,int cost)
{
for (int i=cost;i<=t;++i)
dp[i]=(dp[i]+dp[i-cost])%10000;
}
void fun(int value,int num)
{
if (value*num>=t)
{baggall(value,value);return;}
int k=1;
while(k<=num)
{
bagg01(k*value,k*value);
num-=k;
k=k*2;
}
bagg01(num*value,num*value);
}*/
void fun(int value,int num)
{
for (int j=sum;j>=0;--j)
for (int k=1;k<=num&&j>=k*value;++k)
dp[j]=(dp[j]+dp[j-k*value])%10000;现在还不知道这个母函数与多重背包有什么区别
}
int main()
{
int n,i,p[1500],m[1500];
while(scanf("%d",&n),n)
{
sum=0;
for (i=1;i<=n;++i)
{scanf("%d%d",&p[i],&m[i]);sum=sum+p[i]*m[i];}
t=sum/3;
if (sum!=3*t)
{
printf ("sorry\n");
continue;
}
memset(dp,0,sizeof(dp));
dp[0]=1;
for (i=1;i<=n;++i)
fun(p[i],m[i]);//代表价值和数量
if (dp[t]!=0)
printf ("%d\n",dp[t]);
else
printf ("sorry\n");
}
return 0;
}