unittest
{
	assert( [ "1 2", "10 10", "12 4" ].parse.expand.solve == "1" );
	assert( [ "100 1", "101 101", "102 1" ].parse.expand.solve == "infinity" );
	assert( [ "12000 15700", "3390000000 3810000000", "5550000000 2130000000" ].parse.expand.solve == "113" );
	
	assert( [ "100000 100000", "5000000000 5000000000", "6000000000 3999999999" ].parse.expand.solve == "2000000001" );		// 追加ケース
}



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

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

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto ts = input.front.split.to!( long[] );
	input.popFront;
	auto as = input.front.split.to!( long[] );
	input.popFront;
	auto bs = input.front.split.to!( long[] );
	return tuple( ts, as, bs );
}

auto solve( long[] ts, long[] as, long[] bs )
{
	// 初速が早いほうをAにする
	if( as[ 0 ] < bs[ 0 ] )
	{
		auto cs = as;
		as = bs;
		bs = cs;
	}
	
	// 1セットの走行距離を計算
	auto xs = zip( ts, as ).map!( ( z ) => z[ 0 ] * z[ 1 ] ).array;
	auto ys = zip( ts, bs ).map!( ( z ) => z[ 0 ] * z[ 1 ] ).array;
	auto xt = xs.sum;
	auto yt = ys.sum;
	
	// 1セットの走行距離が同じなら、離す→追いつかれる→離す、をずっと繰り返す
	if( xt == yt ) return "infinity";
	
	// Aが1セットの走行距離も長いなら、ずっと前を走る
	if( yt <  xt ) return "0";
	
	// Aが1セットの走行距離が短いなら、離す→追い抜かれる→追い抜く、を繰り返して最後は追い抜かれたままになる
	auto ds = zip( xs, ys ).map!( ( z ) => z[ 0 ] - z[ 1 ] ).array;
	auto dt = ds.sum;
	auto ans = 1 + 2 * ( ds[ 0 ] / -dt );
	return ans.to!( string );
}
