#include<bits/stdc++.h>
using namespace std;
int n, l, r;
struct node{
int a;
int b;
} t[1005] = {{1, 0}};
bool cmp(node x, node y){
return x.a * x.b < y.a * y.b;
}
struct Bigint {
static const int N = 10005;
int number[N], len;
Bigint(int a = 0) {
memset(number, 0, sizeof number);
for (len = 0; a; len ++){
number[len] = a % 10;
a /= 10;
}
}
int &operator[](int i) {
return number[i];
}
void print() {
for (int i = max(len, 0); i >= 0; i --)
putchar(number[i] + 48);
}
};
Bigint Big_times(Bigint a, int b) {
Bigint c;
c.len = a.len;
for (int i = 0; i < a.len; i ++)
c[i] = a[i] * b;
a.len += 11;
for (int i = 0; i < a.len; i ++){
c[i + 1] += c[i] / 10;
c[i] %= 10;
}
for (; !c[c.len]; c.len --);
return c;
}
Bigint Big_div(Bigint a, int b) {
for (int i = 0; i < a.len; i ++)
a[i + 1] += a[i] % b * 10, a[i] /= b;
a.len += 11;
for (; !a[a.len]; a.len --);
return a;
}
bool operator<(Bigint a, Bigint b) {
if (a.len == b.len){
for (int i = a.len - 1; i >= 0; i --)
if (a[i] != b[i])
return a[i] < b[i];
return false;
}
return a.len < b.len;
}
int main(){
scanf("%d%d%d", &n, &l, &r);
Bigint cnt = l, ans;
for (int i = 1; i <= n; i ++)
scanf("%d%d", &t[i].a, &t[i].b);
sort(t + 1, t + n + 1, cmp);
for (int i = 1; i <= n; i ++){
cnt = Big_times(cnt, t[i - 1].a);
Bigint k = Big_div(cnt, t[i].b);
if (i == 1 || ans < k)
ans = k;
}
ans.print();
return 0;
}