#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long LL;
const int N=1010;
struct Num
{
int l;
int r;
}num[N];
int a,b;
int n;
LL sum[N];
bool cmp(Num a,Num b)
{
int suma=a.l+a.r,sumb=b.l+b.r;
return suma<sumb;
}
vector<int>mul(vector<int>&a,int b)
{
int t=0;
vector<int>C;
for(int i=0;i<a.size();++i)
{
t+=a[i]*b;
C.push_back(t%10);
t/=10;
}
while(t)C.push_back(t%10),t/=10;
return C;
}
vector<int>div(vector<int>a,int b)
{
int r=0;
vector<int>C;
for(int i=0;i<a.size();++i)
{
r=r*10+a[i];
C.push_back(r/b);//最高位在C[0]
r%=b;
}
reverse(C.begin(),C.end());
while(C.back()==0&&C.size()>1)C.pop_back();
reverse(C.begin(),C.end());
return C;
}
bool judge(vector<int>&a,vector<int>&b)//判断a>=b
{
if(a.size()!=b.size())return a.size()>b.size();
for(int i=0;i<a.size();++i)
{
if(a[i]!=b[i])return a[i]>b[i];
}
return true;
}
int main()
{
vector<int>ans;
vector<int>A;
ans.push_back(0);
vector<int>C[N];
cin>>n;
cin>>a>>b;
C[0].push_back(a);
for(int i=1;i<=n;++i)
{
int l,r;
cin>>l>>r;
num[i]={l,r};
}
sort(num+1,num+1+n,cmp);
vector<int>tmp[N];
for(int i=1;i<=n;++i)
{
C[i]=mul(C[i-1],num[i].l);
tmp[i]=C[i];//tmp是num[i].l的前缀积
reverse(tmp[i].begin(),tmp[i].end());
}
for(int i=1;i<=n;++i)
{
tmp[i]=div(tmp[i],num[i].l);
tmp[i]=div(tmp[i],num[i].r);
if(judge(tmp[i],ans));//判断二者大小
ans=tmp[i];
}
for(auto t:ans)
cout<<t;
return 0;
}