unittest
{
	assert( [ "2 3 1 2" ].parse.expand.solve == "3.000000000 0" );
	assert( [ "2 2 1 1" ].parse.expand.solve == "2.000000000 1" );
	
	assert( [ "2 2 0 0" ].parse.expand.solve == "4.000000000 0" );		// 追加ケース
	assert( [ "2 2 1 0" ].parse.expand.solve == "2.000000000 0" );		// 追加ケース
	assert( [ "2 2 0 1" ].parse.expand.solve == "2.000000000 0" );		// 追加ケース
}



import std.algorithm;
import std.conv;
import std.range;
import std.stdio;
import std.string;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto whxy = input.front.split.to!( double[] );
	return tuple( whxy[ 0 ], whxy[ 1 ], whxy[ 2 ], whxy[ 3 ] );
}

auto solve( double w, double h, double x, double y )
{
	auto dx = ( 0 < x && x < w );
	auto dy = ( 0 < y && y < h );
	if( dx && dy )
	{
		auto ans1 = h * min( x, w - x );
		auto ans2 = w * min( y, h - y );
		return format( "%0.9f %d", max( ans1, ans2 ), ( ans1 == ans2 ) );
	}
	else if( dx )
	{
		return format( "%0.9f %d", h * min( x, w - x ), 0 );
	}
	else if( dy )
	{
		return format( "%0.9f %d", w * min( y, h - y ), 0 );
	}
	else
	{
		return format( "%0.9f %d", w * h, 0 );
	}
}
