#include<iostream>
//#include<fstream>
#include<algorithm>
using namespace std;
const int N(1005),M(5005);
struct node{
int left,right,c;
bool operator < (node x)const
{
return c<x.c;
}
};
node dachen[N];
int a[M]={0},b[M]={0},gold[M]={0};//a数组存累乘,b数组存金币数,gold数组保存最多金币数
//ifstream cin("game.in");
//ofstream cout("game.out");
void chen(int a[],int x) //高精度乘以低精度
{
for (int i=1;i<=a[0];i++)
a[i]*=x;
for (int i=1;i<=a[0];i++)
a[i+1]+=a[i]/10,a[i]%=10;
while (a[a[0]+1]) a[0]++,a[a[0]+1]=a[a[0]]/10,a[a[0]]%=10;
}
void div(int a[],int x) //高精度除以低精度
{
int d(0);
for (int i=a[0];i>0;i--)
{
d=d*10+a[i];
b[i]=d/x;
d%=x;
}
b[0]=a[0];
while (b[0]>1&&b[b[0]]==0) b[0]--;
}
bool bigger(int a[],int b[]) //高精度比较大小
{
if (a[0]!=b[0]) return a[0]>b[0];
for (int i=a[0];i>0;i--)
if (a[i]!=b[i])
return a[i]>b[i];
return false;
}
void solve(int n)
{
gold[0]=1; //gold数组初始化为0
a[0]=1; a[1]=1; //累乘数组初始化为1
chen(a,dachen[0].left);
for (int i=1;i<n;i++)
{
div(a,dachen[i].right);
if (bigger(b,gold)) //copy(b,b+b[0]+1,gold);
for (int j=0;j<=b[0];j++)
gold[j]=b[j];
chen(a,dachen[i].left);
}
}
int main()
{
int n;
cin>>n;
for (int i=0;i<=n;i++)
{
cin>>dachen[i].left>>dachen[i].right;
dachen[i].c=dachen[i].left * dachen[i].right;
}
n++;
sort(dachen+1,dachen+n);
solve(n);
for (int i=gold[0];i>0;i--) cout<<gold[i];
cout<<endl;
return 0;
}
/**************************************************************
Problem: 2315
User: admin
Language: C++
Result: Accepted
Time:110 ms
Memory:2148 kb
****************************************************************/