#include <bits/stdc++.h>
using namespace std;
const int MAXN = 111111;
int n, P, Q;
struct point {
  int x, y;
  point(){};
  point(int _x, int _y) : x(_x), y(_y){};
  inline friend point operator-(const point &p, const point &q) {
    return point(p.x - q.x, p.y - q.y);
  }
} p[MAXN], STACK123[MAXN];
inline long long cross(const point &p, const point &q) {
  return (long long)p.x * q.y - (long long)p.y * q.x;
}
inline bool cmp(const point &p, const point &q) { return p.x < q.x; }
int main() {
  scanf("%d%d%d", &n, &P, &Q);
  int mxx = -1, mxy = -1;
  for (int i = 1; i <= n; ++i) {
    scanf("%d%d", &p[i].x, &p[i].y);
    mxx = max(mxx, p[i].x);
    mxy = max(mxy, p[i].y);
  }
  p[++n] = point(0, mxy);
  p[++n] = point(mxx, 0);
  sort(p + 1, p + n + 1, cmp);
  int top = 0;
  for (int i = 1; i <= n; ++i) {
    while (top > 1 &&
           cross(STACK123[top] - STACK123[top - 1], p[i] - STACK123[top]) >= 0)
      --top;
    STACK123[++top] = p[i];
  }
  int k = 1;
  point A = point(P, Q);
  for (int i = 2; i <= top; ++i)
    if (cross(STACK123[i], A) < 0) k = i;
  long long s1 = cross(STACK123[k + 1], A), s2 = cross(A, STACK123[k]);
  double xx = (double)STACK123[k + 1].x +
              (double)(STACK123[k].x - STACK123[k + 1].x) / (s1 + s2) * s1;
  double yy = (double)STACK123[k + 1].y +
              (double)(STACK123[k].y - STACK123[k + 1].y) / (s1 + s2) * s1;
  printf("%.10f\n", 1.0 * A.x / xx);
}
