#include <stdio.h>
#include <algorithm>
#ifdef ONLINE_JUDGE
#define G getchar_unlocked()
#endif
#ifndef G
#define G _getchar_nolock()
#endif
static inline int r(){
char c; int i = 0; while((c = G) < '0');
for(; c >= '0'; c = G)
i = (i << 1) + (i << 3) + (c ^ '0');
return i;
}
using std::sort;
struct P{
int l, r, m;
P(int _ = 0, int __ = 0){
l = _; r = __; m = _ * __;
}
} m[1000];
bool cmp(P a, P b){return a.m < b.m; }
long long mul[3000], lm = 1, e = 1e9;
long long ans[3000], p = 0, pos = -1, la; bool j;
int main(){
int n = r(), kl = r(), kr = r();
for(int i = 0; i < n; ++i){
m[i] = P(r(), r());
}
sort(m, m + n, cmp);
*mul = kl;
for(int i = 0; i < n - 1; ++i){
for(int j = 0; j < lm; ++j){
mul[j] *= m[i].l;
if(mul[j] >= e){
mul[j + 1] += mul[j] / e;
mul[j] %= e;
}
}
if(mul[lm]) ++lm;
}
int d = m[n - 1].r;
for(int i = lm - 1; ~i; --i, ++la){
p = p * e + mul[i];
if(p > d){
if(!j){
pos = i; j = 1;
}
ans[la] = p / d;
p %= d;
}
}
if(pos == -1) return putchar('0'), 0;
printf("%lld", ans[pos]);
for(int i = pos + 1; i < la; ++i)
printf("%09lld", ans[i]);
return 0;
}