You are an experienced Codeforces user. Today you found out that during your activity on Codeforces you have made y submissions, out of which x have been successful. Thus, your current success rate on Codeforces is equal to x / y.

Your favorite rational number in the [0;1] range is p / q. Now you wonder: what is the smallest number of submissions you have to make if you want your success rate to be p / q?

Input

The first line contains a single integer t (1 ≤ t ≤ 1000) — the number of test cases.

Each of the next t lines contains four integers x, y, p and q (0 ≤ x ≤ y ≤ 109; 0 ≤ p ≤ q ≤ 109; y > 0; q > 0).

It is guaranteed that p / q is an irreducible fraction.

Hacks. For hacks, an additional constraint of t ≤ 5 must be met.

Output

For each test case, output a single integer equal to the smallest number of submissions you have to make if you want your success rate to be equal to your favorite rational number, or -1 if this is impossible to achieve.

Example

Input

4
3 10 1 2
7 14 3 8
20 70 2 7
5 6 1 1


Output

4
10
0
-1

Note

In the first example, you have to make 4 successful submissions. Your success rate will be equal to 7 / 14, or 1 / 2.

In the second example, you have to make 2 successful and 8 unsuccessful submissions. Your success rate will be equal to 9 / 24, or 3 / 8.

In the third example, there is no need to make any new submissions. Your success rate is already equal to 20 / 70, or 2 / 7.

In the fourth example, the only unsuccessful submission breaks your hopes of having the success rate equal to 1.
// CodeForces Round #673 A competition

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class SuccessRate {

	int t;
	long []xa;
	long []ya;
	long []pa;
	long []qa;
	long []npop;

	private void readData(BufferedReader bin) throws IOException {
		String s = bin.readLine();
		String []ss = s.split(" ");
		t = Integer.parseInt(ss[0]);
		// read t
		xa = new long[t];
		ya = new long[t];
		pa = new long[t];
		qa = new long[t];
		npop = new long[t];
		for (int i=0; i<t; i++) {
			s = bin.readLine();
			ss = s.split(" ");
			xa[i] = Long.parseLong(ss[0]);
			ya[i] = Long.parseLong(ss[1]);
			pa[i] = Long.parseLong(ss[2]);
			qa[i] = Long.parseLong(ss[3]);
		}		
	}

	void printRes() {
		for (int i=0; i<t; i++) {
			System.out.println(npop[i]);
		}
	}
	
	long mink(long x, long p) {
		long k = (x-3)/p;
		while (x>k*p) {
			k++;
		}
		return k;
	}
	
	long countOne(int it) {
		long x = xa[it];
		long y = ya[it];
		long p = pa[it];
		long q = qa[it];
		if (q==1) {
			if (p==0 && x>0) {
				return -1;
			} else if (p==1 && x!=y){
				return -1;
			} else {
				return 0;
			}
		}
		int np = 0;
		// min k, kp>=x kq>=y
		long kv = mink(x, p);
		long kp = mink(y-x, q-p);
		long k = Math.max(kv, kp);
		long needv = k*p - x;
		long needp = k*(q-p) - (y-x);
		return needv + needp;
	}
	

	private void calculate() {
		for (int it=0; it<t; it++) {
			npop[it] = countOne(it);
		}
	}

	public static void main(String[] args) throws IOException {
		// BufferedReader bin = new BufferedReader(new FileReader("cactus.in"));
		BufferedReader bin = new BufferedReader(
				new InputStreamReader(System.in));
		SuccessRate l = new SuccessRate();
		l.readData(bin);
		l.calculate();
		l.printRes();
	}
}
