#include"iostream"
#include"cstring"
#include"algorithm"
#include"cstdlib"
using namespace std;
#define ll long long
const int N=1005;
int kl,kr,n,m=0;
char al[10000],bl[10000],ans[10000];
struct node
{
ll l;
ll r;
ll lr;
}dc[N];
bool cmp(node a,node b){
return a.lr<b.lr;
}
void mystrrev(char *k){
int end=strlen(k)-1;
int i=0;
while(i<end){
swap(k[i],k[end]);
i++;
end--;
}
}
void llStr( ll e,char *k){
ll t=e;
int i=0;
while(t){
k[i++]=t%10+'0';
t=t/10;
}
k[i]='\0';
}
ll strll(char *a){
int ai=0;
ll num=0;
while(a[ai]){
num=num*10+(a[ai++]-'0');
}
return num;
}
int add(char *a,char *b,char *c){
int ai=0,bi=0,ci=0;
int pt=0,t;
while(a[ai]&&b[bi]){
t=a[ai++]+b[bi++]+pt-'0'-'0';
c[ci++]=t%10+'0';
pt=t/10;
}
while(a[ai]){
t=a[ai++]+pt-'0';
c[ci++]=t%10+'0';
pt=t/10;
}
while(b[bi]){
t=b[bi++]+pt-'0';
c[ci++]=t%10+'0';
pt=t/10;
}
while(pt){
c[ci++]=pt%10+'0';
pt=pt/10;
}
c[ci]='\0';
return ci;
}
int multiply(char *a,ll b,char *c){
int ai=0,ci=0,ti;
int t,pt=0,k,w=0;
char temp[10000],*e=c;
temp[0]='\0';
while(b){
k=b%10;
ti=0;
ai=0;
while(ti<w){
e[ti++]='0';
}
while(a[ai]){
t=(a[ai++]-'0')*k+pt;
e[ti++]=t%10+'0';
pt=t/10;
}
while(pt){
e[ti++]=pt%10+'0';
pt=pt/10;
}
e[ti]='\0';
w++;
e=temp;
ci=add(c,temp,c);
b=b/10;
}
c[ci]='\0';
return ci;
}
int divide(char *a,ll b,char *c){
int ai=0,ci=0;
int t,pt=0;
bool f=false;
while(a[ai]){
t=(pt*10+(a[ai]-'0'))/b;
if(t!=0||f){
f=true;
c[ci++]=t+'0';
pt=(pt*10+(a[ai]-'0'))%b;
}
else pt=pt*10+(a[ai]-'0')%b;
ai++;
}
c[ci]='\0';
return ci;
}
int main(){
scanf("%d",&n);
scanf("%d%d",&kl,&kr);
llStr(kl,al);
char *k=al,*t=bl;
for(int i=1;i<=n;i++){
scanf("%lld%lld",&dc[i].l,&dc[i].r);
dc[i].lr=dc[i].l*dc[i].r;
}
sort(dc+1,dc+n+1,cmp);
for(int i=1;i<n;i++){
multiply(k,dc[i].l,t);
swap(k,t);
}
mystrrev(k);
divide(k,dc[n].r,ans);
cout<<ans<<endl;
return 0;
}