#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct node{
int l,r;
long long mult;
}a[1010];
int n;
int mut[200]={0,1},lenmut=1,cu[200],lencu,maxx[200]={0},lenmaxx=0;
int cmp(node q,node p)
{
if(q.mult==p.mult)return q.l<p.l;
else return q.mult<p.mult;
}
void multiply(int x)
{
for(int i=1;i<=lenmut;i++)
mut[i]*=x;
for(int i=2;i<=lenmut;i++)
{
mut[i]+=mut[i-1]/10;
mut[i-1]%=10;
}
while(mut[lenmut]>10)
{
++lenmut;
mut[lenmut]=mut[lenmut-1]/10;
mut[lenmut-1]%=10;
}
//for(int i=lenmut;i>=1;i--)cout<<mut[i]<<' ';
//cout<<'m'<<endl;
}
void cut(int x)
{
memset(cu,0,sizeof(cu));
int yu=0;
lencu=lenmut;
for(int i=lencu;i>=1;i--)
{
cu[i]=(mut[i]+yu*10)/x;
yu=(mut[i]+yu*10)%x;
}
while(!cu[lencu])--lencu;
//for(int i=lencu;i>=1;i--)cout<<cu[i]<<' ';
//cout<<'c'<<endl;
}
void zhuan()
{
memset(maxx,0,sizeof(maxx));
lenmaxx=lencu;
for(int i=1;i<=lenmaxx;i++)maxx[i]=cu[i];
}
void maxn()
{
if(lencu>lenmaxx)zhuan();
else if(lencu<lenmaxx)return ;
else for(int i=1;i<=lencu;i++)
if(cu[i]>maxx[i])
{
zhuan();
return ;
}
else if(cu[i]<maxx[i])return ;
}
void sou()
{
for(int i=1;i<=n;i++)
{
multiply(a[i-1].l);
cut(a[i].r);
maxn();
}
for(int i=lenmaxx;i>=1;i--)
cout<<maxx[i];
}
int main()
{
//freopen("P1080_3.in","r",stdin);
cin>>n;
//cout<<n<<endl;
for(int i=0;i<=n;i++)
{
cin>>a[i].l>>a[i].r;
a[i].mult=a[i].l*a[i].r;
}
sort(a+1,a+n+1,cmp);
//for(int i=0;i<=n;i++)cout<<a[i].l<<' '<<a[i].r<<' '<<a[i].mult<<endl;
sou();
return 0;
}