struct CountExpressions
{
	static int add(int x, int y) { return x+y; }
	static int sub(int x, int y) { return x-y; }
	static int mul(int x, int y) { return x*y; }

	int calcExpressions(int x, int y, int val)
	{
		int num[][4] = {
			{x,x,y,y},
			{x,y,x,y},
			{x,y,y,x},
			{y,x,x,y},
			{y,x,y,x},
			{y,y,x,x},
		};
		int (*op[])(int,int) = { &add, &sub, &mul };

		int cnt = 0;
		for(int a=0; a<6; ++a)
		for(int i=0; i<3; ++i)
		for(int j=0; j<3; ++j)
		for(int k=0; k<3; ++k)
			if( val == op[k]( op[j]( op[i](num[a][0], num[a][1]), num[a][2] ), num[a][3] ) )
				++cnt;
		return cnt;
	}
};
