/**
 * Sample solution for the Sequences problem.
 *
 */

import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import java.util.logging.ConsoleHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;


public class Sequences_sjz {

	static Logger LOG = Logger.getLogger(Sequences_sjz.class.getName());

	static {
		Handler h = new ConsoleHandler();
		LOG.setLevel(Level.INFO);  // Change to INFO/FINER to toggle debug output
		h.setLevel(Level.FINER);
		LOG.addHandler(h);
	}

	boolean validate (int a[])
	{
		for (int i = 0; i < 4; ++i)
			if (a[i] <= 0 || a[i] > 10000)
				return false;


		// Check for arithmetic sequence
		boolean OK = true;
		int k = a[1] - a[0];
		for (int i = 2; i < 4; ++i)
			if (a[i] != a[0] + i * k)
				OK = false;
		if (!OK) {
			OK = true;
			// Check for geometric sequence
			k = a[1] / a[0];
			if (a[1] % a[0] != 0)
				return false;
			for (int i = 2; i < 4; ++i)
				if (a[i] != a[i-1] * k)
					OK = false;
		}
		return OK;
	}


	void solve0(int a[])
	{
		int k = a[2] - a[1];
		a[0] = a[1] - k;
		if (!validate(a)) {
			k = a[2] / a[1];
			a[0] = a[1] / k;
			if (!validate(a))
			{
				a[0] = -1;
			}
		}
	}

	void solve1(int a[])
	{
		int k = a[3] - a[2];
		a[1] = a[2] - k;
		if (!validate(a)) {
			k = a[3] / a[2];
			a[1] = a[2] / k;
			if (!validate(a))
			{
				a[1] = -1;
			}
		}
	}

	void solve2(int a[])
	{
		int k = a[1] - a[0];
		a[2] = a[1] + k;
		if (!validate(a)) {
			k = a[1] / a[0];
			a[2] = a[1] * k;
			if (!validate(a))
			{
				a[2] = -1;
			}
		}
	}

	void solve3(int a[])
	{
		int k = a[1] - a[0];
		a[3] = a[2] + k;
		if (!validate(a)) {
			k = a[1] / a[0];
			a[3] = a[2] * k;
			if (!validate(a))
			{
				a[3] = -1;
			}
		}
	}



	public void solve(int[] a)
	{
		int openPos = 0;
		for (int i = 0; i < 4; i++)
			if (a[i] < 0)
				openPos = i;
		if (openPos == 0)
			solve0(a);
		else if (openPos == 1)
			solve1(a);
		else if (openPos == 2)
			solve2(a);
		else
			solve3(a);

		if (a[openPos] >= 0)
		{
			if (validate(a))
			{
				System.out.println (a[openPos]);
			}
			else
			{
				System.out.println (-1);
			}
		}
		else
		{
			System.out.println (-1);
		}
	}




	/**
	 * Run the program.  Because redirecting input is awkward in Eclipse,
	 *    if a command line parameter is given, it is treated as the name
	 *    of an input file. If no command parameter is given, input is taken
	 *    from System.in.
	 * @param args  Command line parameters
	 * @throws IOException
	 */
	public static void main (String[] args) throws IOException
	{
		Scanner input;
		if (args.length == 0)
			input = new Scanner(System.in);
		else
			input = new Scanner(new File(args[0]));

		int[] seq = new int[4];
		for (int i = 0; i < 4; ++i)
			seq[i] =  input.nextInt();
		while (seq[0] > 0 || seq[1] > 0) {
			Sequences_sjz problem = new Sequences_sjz ();
			problem.solve(seq);
			for (int i = 0; i < 4; ++i)
				seq[i] =  input.nextInt();
		}
		input.close();
	}
}