#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static const int wheel_a[12][4] = { /* outer shape -- inner shape */
	{3728, 4331, 7547, 8934}, /* Tri-Circle */
	{2231, 1110, 4370, 8200}, /* Oval-Circle */
	{1243, 8517, 6352, 4118}, /* Square-Circle */
	{2516, 1423, 2735, 6256}, /* Circle-Circle */
	{8829, 3049, 5662, 7777}, /* Tri-Tri */
	{2848, 2784, 4883, 1179}, /* Oval-Tri */
	{3589, 1467, 3802, 5160}, /* Square-Tri */
	{8387, 1403, 4551, 7078}, /* Circle-Tri */
	{3216, 9957, 2461, 9139}, /* Tri-Row */
	{5788, 4954, 6380, 3479}, /* Oval-Row */
	{2661, 2095, 1219, 2527}, /* Square-Row */
	{1735, 8553, 7210, 8438}, /* Circle-Row */
}, wheel_b[12][4] = {
	{5836, 4993, 6004, 3111}, /* Tri-Circle */
	{1774, 2427, 1557, 3197}, /* Oval-Circle */
	{9220, 3956,    0, 4171}, /* Square-Circle */
	{   0, 8327, 4284, 3381}, /* Circle-Circle */
	{5748, 2221, 5289, 7053}, /* Tri-Tri */
	{3971, 1424, 8251, 5335}, /* Oval-Tri */
	{6020, 2060, 2578,    0}, /* Square-Tri */
	{2329, 3947, 4832, 2100}, /* Circle-Tri */
	{2635,    0, 1924, 2420}, /* Tri-Row */
	{8116, 3251, 7721, 2032}, /* Circle-Row */
	{   0, 3441, 8426, 1135}, /* Square-Row */
	{9124,    0, 7122, 6357}, /* Circle-Row */
};
static const int wheel_c[12] = {
	1, /* Jaguar */
	2, /* Lamborghini */
	0, /* Porsche */
	1, /* Mercedes */
	3, /* Maserati */
	0, /* Mythos */
	2, /* CERV III */
	1, /* Diablo */
	3, /* Viper */
	0, /* 959 */
	1, /* F40 */
	3, /* Ferrari  */
};

int main(int argc, char **argv)
{
	int A, B, C, D, cur[12][4], i, j;

	if (argc != 5) {
		fprintf(stderr,
			"Syntax: %s KEY1 KEY2 CAR OBJECT\n"
			"\n"
			" Inner/Outer:Tri Oval Square Circle\n"
			" Circle        0    1      2      3\n"
			" Tri           4    5      6      7\n"
			" Dash          8    9     10     11\n"
			"\n"
			" CAR-----------------------.-OBJECT-----------------\n"
			" 0 Jaguar       6 CERV III | 0 Torque      6 Turbo\n"
			" 1 Lamborghini  7 Diablo   | 1 Steering    7 Wheelbase\n"
			" 2 Porsche      8 Viper    | 2 Chassis     8 Suspension\n"
			" 3 Mercedes     9 959      | 3 MPH         9 Top Speed\n"
			" 4 Maserati    10 F40      | 4 TestDrive  10 Weight\n"
			" 5 Mythos      11 Ferrari  | 5 RPM        11 Horsepower\n",
			*argv
		);
		return EXIT_FAILURE;
	}

	A = strtoul(argv[1], NULL, 0);
	B = strtoul(argv[2], NULL, 0);
	C = strtoul(argv[3], NULL, 0);
	D = strtoul(argv[4], NULL, 0);

	/* Start with wheel A */
	for (i = A; i < 12; ++i)
		memcpy(cur[i - A], wheel_a[i], sizeof(wheel_a[i]));
	for (i = 0; i < A; ++i)
		memcpy(cur[12 - A + i], wheel_a[i], sizeof(wheel_a[i]));

	/* Lay wheel B on top */
	for (i = B; i < 12; ++i)
		for (j = 0; j < 4; ++j) {
			int s = wheel_b[i][j];
			if (s != 0)
				cur[i - B][j] = s;
		}
	for (i = 0; i < B; ++i)
		for (j = 0; j < 4; ++j) {
			int s = wheel_b[i][j];
			if (s != 0)
				cur[12 - B + i][j] = s;
		}

	/* Lay wheel C on top */
	for (i = C; i < 12; ++i)
		for (j = 0; j < 4; ++j)
			if (j != wheel_c[i])
				cur[i - C][j] = 0;
	for (i = 0; i < C; ++i)
		for (j = 0; j < 4; ++j)
			if (j != wheel_c[i])
				cur[12 - C + i][j] = 0;

	/* Choose from D */
	if ((j = D - C) < 0)
		j += 12;

	printf("%d\n", cur[j][wheel_c[D]]);
	return EXIT_SUCCESS;
}
