#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int n,num_l[9005][500],num_r[9005][500],multi[9005][500],divi[9005][500];
struct node
{
int l,r;
}peo[9005];
bool cmp(struct node a,struct node b)
{
return a.r*a.l<b.l*b.r;
}
int getlen_m(int pl)
{
int lenth;
for(int i=500; i>=1; --i)
{
if(multi[pl][i]!=0)
{
lenth=i;
break;
}
}
return lenth;
}
int getlen_d(int pl)
{
int lenth;
for(int i=500; i>=1; --i)
{
if(divi[pl][i]!=0)
{
lenth=i;
break;
}
}
return lenth;
}
int getlen_n(int number)
{
int nn=number,len=0;
while(nn!=0)
{
nn/=10;
len++;
}
return len;
}
void put(int pl)
{
int left=getlen_n(peo[pl].l),right=getlen_n(peo[pl].r);
int ll=peo[pl].l,rr=peo[pl].r;
for(int i=1; i<=left; ++i)
{
num_l[pl][i]=ll%10;
ll/=10;
}
num_l[pl][0]=left;
for(int i=1; i<=right; ++i)
{
num_r[pl][i]=rr%10;
rr/=10;
}
num_r[pl][0]=right;
}
void multiply(int pl)
{
for(int i=1; i<=num_l[pl-1][0]; ++i)
{
for(int j=1; j<=multi[pl-1][0]; ++j)
{
int cheng=num_l[pl-1][i]*multi[pl-1][j];
multi[pl][i+j-1]+=cheng%10;
multi[pl][i+j]=cheng/10;
}
}
multi[pl][0]=getlen_m(pl);
}
void divide(int pl)
{
int de_multi[500];
for(int i=0; i<=multi[pl][0]; ++i)
{
de_multi[i]=multi[pl][i];
}
for(int i=multi[pl][0]; i>=1; --i)
{
divi[pl][i]=de_multi[i]/peo[pl].r;
de_multi[i-1]+=de_multi[i]%peo[pl].r*10;
}
divi[pl][0]=getlen_d(pl);
}
void pairup()
{
int max_len=0;
for(int i=1; i<=n; ++i)
{
if(divi[i][0]>max_len)
{
max_len=divi[i][0];
}
}
int plac=0,maxx=0;
for(int i=1; i<=n; ++i)
{
if(divi[i][max_len]>maxx)
{
plac=i;
maxx=divi[i][max_len];
}
}
for(int i=divi[plac][0]; i>=1; --i)
{
cout<<divi[plac][i];
}
}
int main()
{
cin>>n;
memset(num_l,0,sizeof(num_l));
memset(num_r,0,sizeof(num_r));
memset(multi,0,sizeof(multi));
memset(divi,0,sizeof(divi));
for(int i=0; i<=n; ++i)
{
cin>>peo[i].l>>peo[i].r;
}
sort(peo+1,peo+1+n,cmp);
for(int i=0; i<=n; ++i)
{
put(i);
}
multi[0][0]=1;
multi[0][1]=1;
for(int i=1; i<=n; ++i)
{
multiply(i);
divide(i);
}
pairup();
return 0;
}