Alice and Bob are trapped in a grid having N rows and M columns. Alice is currently at cell (1, 1) and Bob is at cell (N, M) and they both want to meet each other at any common cell. But they have some restrictions in the way they can move and meet:

A _step_ is defined as moving to an adjacent cell from the current cell that the person is in. So in a single step, if a person is at (X, Y) they may move to any one of the following cells, provided that they are inside the grid's boundaries - (X + 1, Y), (X, Y + 1), (X - 1, Y), (X, Y - 1).

A _move_ for Alice is defined to be exactly X steps. And a _move_ for Bob is defined to be exactly Y steps.

They can only meet at the common cell after Alice has just completed her move i.e. they should not meet in the middle of anyone's move or at the end of Bob's move. The first time that they meet should be right after a move of Alice, and they stop moving after that. 

Alice makes a move first, then Bob makes a move, and they alternate like this.

Alice and Bob want to know if it is possible to meet with these restrictions. Please help Alice and Bob by telling them whether they would be able to meet each other if they stick to these restrictions.

------ Input Format ------ 

- The first line of input will contain a single integer T, denoting the number of test cases.
- Each test case consists of a single line of input containing four integers: N, M, X and Y denoting the number of rows, number of columns, number of steps in Alice's one move and the number of steps in Bob's one move respectively.

------ Output Format ------ 

For each test case, output in a single line \texttt{YES} if they would be able to meet each other at a common cell, else output \texttt{NO}.

You may print each character of the string in uppercase or lowercase (for example, the strings \texttt{YeS}, \texttt{yEs}, \texttt{yes} and \texttt{YES} will all be treated as identical).

------ Constraints ------ 

$1 ≤ T ≤ 1000$
$2 ≤ N, M ≤ 10^{6}$
$1 ≤ X, Y ≤ 10^{9}$

------ subtasks ------ 

Subtask 1 (10 points): $1 ≤ M ≤ 10$
Subtask 2 (20 points): The sum of $N$ across all test cases won't exceed $20$.
Subtask 3 (70 points): No further constraints.

----- Sample Input 1 ------ 
4
2 2 2 1
2 2 1 1
2 2 1 2
2 3 3 3

----- Sample Output 1 ------ 
Yes
No
Yes
Yes

----- explanation 1 ------ 
Test case 1: Alice is initially at $(1, 1)$, and Bob is at $(2, 2)$. In Alice's first _move_, she has to take $2$ _steps_ - she can choose to go from $(1, 1) \rightarrow (1, 2) \rightarrow (2, 2)$. And so at the end of Alice's first move, Alice and Bob meet, and they stop. So the answer is Yes.

Test case 2: Alice is initially at $(1, 1)$, and Bob is at $(2, 2)$. In Alice's first _move_, she has to take $1$ _step_ - she can choose to go from $(1, 1) \rightarrow (1, 2)$, or $(1, 1) \rightarrow (2, 1)$. Similarly for Bob. But you can check that no matter what they do, they can't coordinate in such a way that they meet only after Alice's move. So the answer is No.

Test case 3: Alice is initially at $(1, 1)$, and Bob is at $(2, 2)$. In Alice's first _move_, she has to take $1$ _step_ - she can choose to go from $(1, 1) \rightarrow (1, 2)$. Then in Bob's move, he has to take $2$ steps - he can choose to go from $(2, 2) \rightarrow (2, 1) \rightarrow (2, 2)$. Then in Alice's second move, she can choose to go from $(1, 2) \rightarrow (2, 2)$. And so at the end of Alice's second move, Alice and Bob meet, and they stop. So the answer is Yes.

Test case 4: Alice is initially at $(1, 1)$, and Bob is at $(2, 3)$. In Alice's first _move_, she has to take $3$ _steps_ - she can choose to go from $(1, 1) \rightarrow (1, 2) \rightarrow (1, 3) \rightarrow (2, 3)$. And so at the end of Alice's first move, Alice and Bob meet, and they stop. So the answer is Yes.

Difficulty: MEDIUM_HARD

Starter code:

Solutions:
for item in range(int(input())):
	(n, m, x, y) = map(int, input().split())
	if (n + m) % 2 == 0 and x % 2 != 0 and (y % 2 != 0):
		print('No')
	elif (n + m) % 2 != 0 and x % 2 == 0 and (y % 2 == 0):
		print('No')
	else:
		print('Yes')


for i in range(int(input())):
	(n, m, a, b) = map(int, input().split())
	n += m - 2 + a
	l = a + b
	if n % 2 == 1 and l % 2 == 0:
		print('No')
	else:
		print('Yes')


for i in range(int(input())):
	(a, b, c, d) = map(int, input().split())
	n = 2 - a + b
	if (a + b) % 2 == c % 2 or (a + b) % 2 == d % 2:
		print('Yes')
	else:
		print('No')


for i in range(int(input())):
	(x, y, z, w) = map(int, input().split())
	num = 2 - x + y
	if (x + y) % 2 == z % 2 or (x + y) % 2 == w % 2:
		print('Yes')
	else:
		print('No')


for i in range(int(input())):
	(n, m, x, y) = map(int, input().split())
	if (n + m - 2 + x) % 2 == 1 and (x + y) % 2 == 0:
		print('No')
	else:
		print('Yes')


T = int(input())
for _ in range(T):
	(a, b, c, d) = map(int, input().split())
	if (a + b) % 2 == c % 2 or (a + b) % 2 == d % 2:
		print('Yes')
	else:
		print('No')


for _ in range(int(input())):
	(m, n, x, y) = map(int, input().split())
	steps = m + n - 1 - 1
	steps = steps - x
	if steps % 2 == 1:
		if (x + y) % 2 == 1:
			print('Yes')
		else:
			print('No')
	else:
		print('Yes')


import math
t = int(input())
for _ in range(t):
	(n, m, x, y) = map(int, input().split())
	if (n + m) % 2 == 0 and (x % 2 == 0 or y % 2 == 0):
		print('Yes')
	elif (n + m) % 2 == 1 and (x % 2 == 1 or y % 2 == 1):
		print('Yes')
	else:
		print('No')


for i in range(int(input())):
	(N, M, X, Y) = map(int, input().split(' '))
	if (N + M) % 2 == X % 2 or (N + M) % 2 == Y % 2:
		print('Yes')
	else:
		print('No')


for _ in range(int(input())):
	x = list(map(int, input().split()))
	k = x[0] + x[1]
	if k % 2 == x[2] % 2 or k % 2 == x[3] % 2:
		print('Yes')
	else:
		print('No')


import math

def solve():
	(n, m, x, y) = list(map(int, input().split()))
	print('Yes' if (n + m) % 2 == x % 2 or (n + m) % 2 == y % 2 else 'No')
for _ in range(int(input())):
	solve()


T = int(input())
for test in range(T):
	(N, M, X, Y) = [int(x) for x in input().split()]
	stepsToMeet = N - 1 + (M - 1)
	if (X + Y) % 2 == 0 and stepsToMeet % 2 != X % 2:
		print('No')
	else:
		print('Yes')


t = int(input())
while t:
	t -= 1
	(n, m, a, b) = map(int, input().split())
	n += m - 2 + a
	a += b
	if n % 2 == 1 and a % 2 == 0:
		print('No')
	else:
		print('Yes')


for i in range(int(input())):
	meow = input().split(' ')
	nm = int(meow[0]) + int(meow[1])
	if nm % 2 == 0:
		if int(meow[2]) % 2 == 0 or int(meow[3]) % 2 == 0:
			print('Yes')
		else:
			print('No')
	elif int(meow[2]) % 2 == 0 and int(meow[3]) % 2 == 0:
		print('No')
	else:
		print('Yes')


import heapq
import operator
import itertools
import sys
import functools
import bisect
import math
import random
import statistics
from collections import Counter
for _ in range(int(input())):
	(n, m, a, b) = [int(x) for x in input().split()]
	n += m - 2 + a
	a += b
	if n % 2 == 1 and a % 2 == 0:
		print('No')
	else:
		print('Yes')


for _ in range(int(input())):
	(n, m, x, y) = map(int, input().split())
	t = (n + m) % 2
	if x % 2 == t or y % 2 == t:
		print('Yes')
	else:
		print('No')


n = int(input())
for i in range(n):
	(N, M, X, Y) = map(int, input().split())
	if (N + M + X) % 2 == 1:
		if (X + Y) % 2 == 0:
			print('No')
		else:
			print('Yes')
	else:
		print('Yes')


ri = lambda : int(input())
rl = lambda : list(map(int, input().split()))
rs = lambda : input()
from collections import defaultdict
import sys
sys.setrecursionlimit(100000)
t = ri()
for test in range(t):
	(n, m, x, y) = rl()
	if (n + m) % 2 == x % 2 or (n + m) % 2 == y % 2:
		print('Yes')
	else:
		print('No')


for t in range(int(input())):
	(m, n, a, b) = map(int, input().split())
	s = m + n - 2
	r1 = (s - a) % (a + b)
	r2 = (s + a) % (a + b)
	if (s + a) % 2 == 1 and (a + b) % 2 == 0:
		print('No')
	else:
		print('Yes')