The teacher gave Anton a large geometry homework, but he didn't do it (as usual) as he participated in a regular round on Codeforces. In the task he was given a set of n lines defined by the equations y = k_{i}·x + b_{i}. It was necessary to determine whether there is at least one point of intersection of two of these lines, that lays strictly inside the strip between x_1 < x_2. In other words, is it true that there are 1 ≤ i < j ≤ n and x', y', such that:   y' = k_{i} * x' + b_{i}, that is, point (x', y') belongs to the line number i;  y' = k_{j} * x' + b_{j}, that is, point (x', y') belongs to the line number j;  x_1 < x' < x_2, that is, point (x', y') lies inside the strip bounded by x_1 < x_2. 

You can't leave Anton in trouble, can you? Write a program that solves the given task.


-----Input-----

The first line of the input contains an integer n (2 ≤ n ≤ 100 000) — the number of lines in the task given to Anton. The second line contains integers x_1 and x_2 ( - 1 000 000 ≤ x_1 < x_2 ≤ 1 000 000) defining the strip inside which you need to find a point of intersection of at least two lines.

The following n lines contain integers k_{i}, b_{i} ( - 1 000 000 ≤ k_{i}, b_{i} ≤ 1 000 000) — the descriptions of the lines. It is guaranteed that all lines are pairwise distinct, that is, for any two i ≠ j it is true that either k_{i} ≠ k_{j}, or b_{i} ≠ b_{j}.


-----Output-----

Print "Yes" (without quotes), if there is at least one intersection of two distinct lines, located strictly inside the strip. Otherwise print "No" (without quotes).


-----Examples-----
Input
4
1 2
1 2
1 0
0 1
0 2

Output
NO
Input
2
1 3
1 0
-1 3

Output
YES
Input
2
1 3
1 0
0 2

Output
YES
Input
2
1 3
1 0
0 3

Output
NO


-----Note-----

In the first sample there are intersections located on the border of the strip, but there are no intersections located strictly inside it. [Image]

Difficulty: interview

Starter code:

Solutions:
k = []

x = int(input())
c, d = list(map(int, input().split(' ')))
for i in range(x):
    a, b = list(map(int, input().split(' ')))
    k.append([c*a+b, d*a+b])

k.sort()
for i in range(len(k)-1):
    if k[i+1][1] < k[i][1]:
        print("YES")
        quit()
print("NO")


n = int(input())
x1, x2 = list(map(float, input().split()))
x1 += 1e-10
x2 -= 1e-10
lines = [tuple(map(float, input().split())) for _ in range(n)]
l1 = sorted((k * x1 + b, i) for i, (k, b) in enumerate(lines))
l2 = sorted((k * x2 + b, i) for i, (k, b) in enumerate(lines))
if [i for x, i in l1] == [i for x, i in l2]:
    print('NO')
else:
    print('YES')


n = int(input())
points = []
flag = False
x1, x2 = map(int, input().split())
for i in range(n):
    a, b = map(int, input().split())
    points.append((a, b))


p = []

for i in range(n):
    p.append((points[i][0] * x1 + points[i][1], points[i][0] * x2 + points[i][1]))

p.sort()
for i in range(n - 1):
    if p[i][0] != p[i + 1][0]:
        if p[i][1] > p[i + 1][1]:
            flag = True
if flag:
    print('YES')
else:
    print('NO')

n=int(input())
l,r=list(map(int,input().split()))
i=0
s=[]
while i<n:
	k,b=list(map(int,input().split()))
	s.append([l*k+b,r*k+b])
	i+=1
s.sort()

y=0
i=1
while i<n:
	if s[i-1][1]>s[i][1]:y=1
	i+=1
print(["NO","YES"][y])


def rline():
    return [int(i) for i in input().split()]

N = int(input())
L, R = rline()
l = [rline() for i in range(N)]

atL = []
atR = []

for i in range(N):
    k, b = l[i]
    atL.append((k*L + b, k, i))
    atR.append((k*R + b, -k, i))

atL.sort()
atR.sort()
atL = [i[2] for i in atL]
atR = [i[2] for i in atR]

print(["YES", "NO"][atL == atR])


n = int(input())
x1, x2 = list(map(int, input().split(" ")))

def intercepts(k, b):
    y1 = k*x1+b
    y2 = k*x2+b
    return [y1, y2]

inter=[]
for i in range (n):
    k, b = list(map(int, input().split(" ")))
    inter += [intercepts(k, b)]

inter.sort()
right=[]

for i in range (n):
    intercept = inter[i]
    right += [intercept[1]]
    
right2=[]
for thing in right:
    right2+=[thing]
right.sort()

if right == right2:
    print("NO")
else:
    print("YES")



n=int(input())
done=False
a,b=map(int,input().split())
a+=1/4000000
b-=1/4000000
lol=[]
wow=[]
for i in range(n):
    k,c=map(int,input().split())
    lol.append([k*a+c,i])
    wow.append([k*b+c,i])
wow.sort()
lol.sort()
for i in range(n):
    if lol[i][1]!=wow[i][1]:
        print('YES')
        done=True
        break
if not done:
    print('NO')

def cross(l1, l2, x2):
    return l2[0] * x2 + l2[1] < l1[0] * x2 + l1[1]


def __starting_point():
    n = int(input())
    x1, x2 = list(map(int, input().split()))
    data = [tuple(map(int, input().split())) for i in range(n)]

    data = list(sorted(data, key=lambda x: (x[0] * x1 + x[1], x[0] * x2 + x[1])))
    for i in range(len(data) - 1):
        if cross(data[i], data[i + 1], x2):
            print('YES')
            return

    print('NO')

__starting_point()

n = int(input())
a = input().split(" ")
x1 = int(a[0])
x2 = int(a[1])
coor1 = []
coor2 = []
eps = 0.000000001
for i in range(n):
   a = input().split(" ")
   k = int(a[0])
   b = int(a[1])
   coor1.append((k*(x1+eps) + b, i))
   coor2.append((k*(x2-eps) + b, i))
#print(coor1)
#print(coor2)
coor1.sort()
coor2.sort()
#print(coor1)
#print(coor2)
s = "NO"
for i in range(len(coor1)):
    if (coor1[i][1] != coor2[i][1]):
        s = "YES"
print(s)
            


n = int(input())
a = list()
x1, x2 = list(map(int, input().split()))
for i in range(n):
    k, b = list(map(int, input().split()))
    y1 = k * x1 + b
    y2 = k * x2 + b
    a.append((y1, y2))
a.sort()
fl = 'NO'
y1m = a[0][0]
y2m = a[0][1]
for y1, y2 in a:
    if y2 < y2m:
        fl = 'YES'
    else:
        y2m = max(y2m, y2)
print(fl)
    
    


n = int(input())
x1, x2 = list(map(int, input().split()))
x1 += 10**-8
x2 -= 10**-8
lines = []
for i in range(n):
    lines.append(list(map(int, input().split())))

ord_left = []
ord_right = []
for i in range(n):
    ord_left.append(lines[i][0] * x1 + lines[i][1])
    ord_right.append(lines[i][0] * x2 + lines[i][1])


enum_l = list(range(n))
enum_r = list(range(n))
enum_l.sort(key=lambda ord: ord_left[ord])
enum_r.sort(key=lambda ord: ord_right[ord])



if enum_l == enum_r:
    print("NO")
else:
    print("YES")
# for i in range(len(ord_right)):
#   line = ord_left[i][0]


def ur(k, x, b):
    return k * x + b

n = int(input())
lst = []
x1, x2 = list(map(int, input().split()))
for i in range(n):
    k, b = list(map(int, input().split()))
    lst.append((ur(k, x1, b), ur(k, x2, b)))
lst.sort()    
for i in range(1, n):
    if (lst[i][0] > lst[i - 1][0] and lst[i][1] < lst[i - 1][1]) or (lst[i - 1][0] < lst[i][0] and lst[i - 1][1] > lst[i][1]):
        print('YES')
        break
else:
    print('NO')


n = int(input())

x1,x2 = list(map(float,input().split()))

arr = []

for i in range(n):
    p,q = list(map(float,input().split()))
    r1 = p * x1 + q
    r2 = p * x2 + q
    arr.append((r1,r2))

arr = sorted(arr)

flag = False

for i in range(n-1):
    if arr[i][0] < arr[i+1][0] and arr[i][1] > arr[i+1][1]:
        flag = True
        break

if flag:
    print('YES')
else:
    print('NO')


import sys


#sys.stdin = open("input.txt")
#sys.stdout = open("output.txt", "w")

n = int(input())

k = []
b = []
x1, x2 = (int(i) for i in input().split())

for i in range(n):
	k1, b1 = (int(j) for j in input().split())
	k.append(k1)
	b.append(b1)

zn = [(k[i]*x1 + b[i], k[i]*x2 + b[i]) for i in range(n)]
#print(zn)
zn.sort()
found = False;
for i in range(n - 1):
	if zn[i][1] > zn[i+1][1]:
		found = True
		break

if found:
	print("YES")
else:
	print("NO")

"""
Codeforces Round #329 (Div. 2)

Problem 593 B. Anton and Lines

@author yamaton
@date 2015-11-04
"""

import itertools as it
import functools
import operator
import collections
import math
import sys


EPSILON = 0.0000001

def solve(x1, x2, kbs):
    at_x1 = [k*(x1 + EPSILON) + b for (k, b) in kbs]
    at_x2 = [k*(x2 - EPSILON) + b for (k, b) in kbs]
    order1 = [i for i, _ in sorted(enumerate(at_x1), key=operator.itemgetter(1))]
    print_stderr('at_x1:', at_x1)
    print_stderr('at_x2:', at_x2)
    return any(at_x2[i] > at_x2[j] for (i, j) in zip(order1, order1[1:]))


def print_stderr(*args, **kwargs):
    print(*args, file=sys.stderr, **kwargs)


def tf_to_yn(tf):
    return 'YES' if tf else 'NO'


def main():
    n = int(input())
    [x1, x2] = [int(i) for i in input().strip().split()]
    kbs = [tuple(int(i) for i in input().strip().split()) for _ in range(n)]
    result = solve(x1, x2, kbs)
    print(tf_to_yn(result))


def __starting_point():
    main()

__starting_point()

"""
Codeforces Round #329 (Div. 2)

Problem 593 B. Anton and Lines

@author yamaton
@date 2015-11-04
"""

import itertools as it
import functools
import operator
import collections
import math
import sys


EPSILON = 0.0000001

def solve(x1, x2, kbs, n):
    at_x1 = [k*(x1 + EPSILON) + b for (k, b) in kbs]
    at_x2 = [k*(x2 - EPSILON) + b for (k, b) in kbs]
    order1 = [i for _, i in sorted(zip(at_x1, it.count()))]
    print_stderr('at_x1:', at_x1)
    print_stderr('at_x2:', at_x2)
    return any(at_x2[i] > at_x2[j] for (i, j) in zip(order1, order1[1:]))


def print_stderr(*args, **kwargs):
    print(*args, file=sys.stderr, **kwargs)


def tf_to_yn(tf):
    return 'YES' if tf else 'NO'


def main():
    n = int(input())
    [x1, x2] = [int(i) for i in input().strip().split()]
    kbs = [tuple(int(i) for i in input().strip().split()) for _ in range(n)]
    result = solve(x1, x2, kbs, n)
    print(tf_to_yn(result))


def __starting_point():
    main()

__starting_point()

# import sys
# sys.stdin = open("cf593b.in")

n = int(input())
x1, x2 = map(int, input().split())

k, b = [], []
for _ in range(n):
	kk, bb = map(int, input().split())
	k.append(kk)
	b.append(bb)

at1 = sorted(range(n), key=lambda i: k[i] * (x1 + 1e-8) + b[i])
at2 = sorted(range(n), key=lambda i: k[i] * (x2 - 1e-8) + b[i])

print(["YES", "NO"][at1 == at2])

"""
Codeforces Round #329 (Div. 2)

Problem 593 B. Anton and Lines

@author yamaton
@date 2015-11-04
"""

import itertools as it
import functools
import operator
import collections
import math
import sys


EPSILON = 0.000000001

def solve(x1, x2, kbs):
    at_x1 = [k*(x1 + EPSILON) + b for (k, b) in kbs]
    at_x2 = [k*(x2 - EPSILON) + b for (k, b) in kbs]
    order1 = [i for i, _ in sorted(enumerate(at_x1), key=operator.itemgetter(1))]
    # print_stderr('at_x1:', at_x1)
    # print_stderr('at_x2:', at_x2)
    return any(at_x2[i] > at_x2[j] for (i, j) in zip(order1, order1[1:]))


def print_stderr(*args, **kwargs):
    print(*args, file=sys.stderr, **kwargs)


def tf_to_yn(tf):
    return 'YES' if tf else 'NO'


def main():
    n = int(input())
    [x1, x2] = [int(i) for i in input().strip().split()]
    kbs = [tuple(int(i) for i in input().strip().split()) for _ in range(n)]
    result = solve(x1, x2, kbs)
    print(tf_to_yn(result))


def __starting_point():
    main()

__starting_point()

n = int(input())
x, y = list(map(int,input().split()))
u, v = [], []
x += 0.0000001
y -= 0.0000001
for i in range(n):
    k, m = list(map(int, input().split()))
    u += [(k*x+m, i)]
    v += [(k*y+m, i)]
u, v = sorted(u), sorted(v)
for i in range(n):
    if  u[i][1] != v[i][1]:
        print('YES')
        break
else:
    print('NO')
    


n=int(input())
X,Y=input().split()
X,Y=float(X)+1e-10,float(Y)-1e-10
L=[list(map(float,input().split())) for _ in range(n)]
print('NO' if [i for x,i in sorted((k*X+b,i) for i,(k,b) in enumerate(L))] == [i for x,i in sorted((k*Y+b,i) for i,(k,b) in enumerate(L))] else 'YES')