#include <bits/stdc++.h>
using namespace std;
struct pt {
  long long x, y;
};
int n, p, q;
pt projects[100000];
pt cp[100000];
int m;
bool pcmp(const pt &a, const pt &b) {
  if (a.x < b.x) return true;
  if (a.x > b.x) return false;
  return a.y < b.y;
}
long long cross(long long vx, long long vy, long long wx, long long wy) {
  return vx * wy - vy * wx;
}
bool turnsup(pt &a, pt &b, pt &c) {
  return (cross(b.x - a.x, b.y - a.y, c.x - a.x, c.y - a.y) > 0);
}
void solve_testcase() {
  sort(projects, projects + n, pcmp);
  m = 1;
  for (int i = 0; i < n; i++) {
    while (i < n - 1 && projects[i + 1].x == projects[i].x) i++;
    while ((m > 1 && cp[m - 1].y <= projects[i].y) ||
           (m > 2 && turnsup(cp[m - 2], cp[m - 1], projects[i])))
      m--;
    cp[m] = projects[i];
    m++;
  }
  cp[0].x = 0;
  cp[0].y = cp[1].y;
  cp[m].x = cp[m - 1].x;
  cp[m].y = 0;
  int l = 0;
  while (cross(p, q, cp[l].x, cp[l].y) > 0) l++;
  long long x1 = cp[l - 1].x;
  long long y1 = cp[l - 1].y;
  long long x2 = cp[l].x;
  long long y2 = cp[l].y;
  long long num = cross(x1 - x2, y1 - y2, (long long)p, (long long)q);
  long long denom = cross(x1, y1, x2, y2);
  double res =
      (double)(num / denom) + ((double)(num % denom)) / ((double)denom);
  printf("%.10f\n", res);
}
bool read_testcase() {
  if (scanf("%d %d %d\n", &n, &p, &q) != 3) return false;
  for (int i = 0; i < n; i++) {
    int x, y;
    scanf("%d %d", &x, &y);
    projects[i].x = x;
    projects[i].y = y;
  }
  return true;
}
int main(int argc, char **argv) {
  if (argc > 1 && argv[1][0] != 'x') freopen(argv[1], "r", stdin);
  if (argc > 2) freopen(argv[2], "w", stdout);
  int T = 1;
  clock_t cur, prev = clock();
  while (read_testcase()) {
    fprintf(stderr, ">>>Solving testcase %d<<<<\n", T);
    solve_testcase();
    cur = clock();
    int dur = (cur - prev) * 1000 / CLOCKS_PER_SEC;
    fprintf(stderr, "____Case %d done in %dms.\n", T, dur);
    prev = cur;
    T++;
  }
}
