You are given two integers x and y. You can perform two types of operations: 

  1. Pay a dollars and increase or decrease any of these integers by 1. For example, if x = 0 and y = 7 there are four possible outcomes after this operation: 
    * x = 0, y = 6; 
    * x = 0, y = 8; 
    * x = -1, y = 7; 
    * x = 1, y = 7. 

  2. Pay b dollars and increase or decrease both integers by 1. For example, if x = 0 and y = 7 there are two possible outcomes after this operation: 
    * x = -1, y = 6; 
    * x = 1, y = 8. 



Your goal is to make both given integers equal zero simultaneously, i.e. x = y = 0. There are no other requirements. In particular, it is possible to move from x=1, y=0 to x=y=0.

Calculate the minimum amount of dollars you have to spend on it.

Input

The first line contains one integer t (1 ≤ t ≤ 100) — the number of testcases.

The first line of each test case contains two integers x and y (0 ≤ x, y ≤ 10^9).

The second line of each test case contains two integers a and b (1 ≤ a, b ≤ 10^9).

Output

For each test case print one integer — the minimum amount of dollars you have to spend.

Example

Input


2
1 3
391 555
0 0
9 4


Output


1337
0

Note

In the first test case you can perform the following sequence of operations: first, second, first. This way you spend 391 + 555 + 391 = 1337 dollars.

In the second test case both integers are equal to zero initially, so you dont' have to spend money.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class CF_A_1342
{
    public static void main(String[] args) throws IOException
    {
        int t = readInt();
        for (int i = 0; i < t; i++)
        {
            long x = readInt();
            long y = readInt();
            long a = readInt();
            long b = readInt();

            if (b > 2 * a)
            {
                b = 2 * a;
            }

            long finalPay = 0;

            while (x != 0 || y != 0)
            {
                if (x == 0)
                {
                    if (y > 0)
                    {
                        finalPay += y * a;
                    }
                    else
                    {
                        finalPay += -y * a;
                    }
                    y = 0;
                }
                else if (y == 0)
                {
                    if (x > 0)
                    {
                        finalPay += x * a;
                    }
                    else
                    {
                        finalPay += x * a;
                    }
                    x = 0;
                }
                else if (x < 0 && y < 0)
                {
                    long max = Math.max(x, y);
                    finalPay += b * -max;
                    x -= max;
                    y -= max;
                }
                else if (x > 0 && y > 0)
                {
                    long min = Math.min(x, y);
                    finalPay += b * min;
                    x -= min;
                    y -= min;
                }
                else if (x > 0 && y < 0)
                {
                    long amountX = x;
                    x -= amountX;
                    finalPay += amountX * a;
                    long amountY = y;
                    y -= amountY;
                    finalPay += a * -amountY;
                }
                else if (x < 0 && y > 0)
                {
                    long amountX = x;
                    x -= amountX;
                    finalPay += -amountX * a;
                    long amountY = y;
                    y -= amountY;
                    finalPay += a * amountY;
                }
            }

            System.out.println(finalPay);
        }
    }

    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st;

    static int readInt() throws IOException
    {
        while (st == null || !st.hasMoreTokens())
        {
            st = new StringTokenizer(br.readLine());
        }
        return Integer.parseInt(st.nextToken());
    }
}
