#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
****************************************************************/