import std.conv;
import std.stdio;
import std.string;

void main()
{
	auto dg = readln.split.to!( long[] );
	auto ps = new long[ dg[ 0 ] ];
	auto cs = new long[ dg[ 0 ] ];
	foreach( i; 0 .. dg[ 0 ] )
	{
		auto pc = readln.split.to!( long[] );
		ps[ i ] = pc[ 0 ];
		cs[ i ] = pc[ 1 ];
	}
	writeln( solve( dg[ 1 ], ps, cs ) );
}

auto solve( in long g, in long[] ps, in long[] cs )
{
	auto r_min = long.max;
	auto us = new long[ ps.length ];

	foreach( i, ref u; us )
	{
		u = cast( long ) ( i + 1 ) * 100;
	}
	
	foreach( i; 0 .. ps.length )
	{
		auto r = 1 + solve2( g, ps[ i .. $ ], cs[ i .. $ ], us[ i .. $ ] );
		if( r < r_min ) r_min = r;
	}
	
	return r_min;
}

auto solve2( in long g, in long[] ps, in long[] cs, in long[] us )
{
	auto r_min = 10 ^^ 7;
	auto r_ps = ps.dup;
	long r_g = g - us[ 0 ];
	
	r_ps[ 0 ]--;
	if( r_ps[ 0 ] <= 0 ) r_g -= cs[ 0 ];
	
	if( r_g <= 0 )
	{
		return 0;
	}
	
	foreach( i, r_p; r_ps )
	{
		if( r_p <= 0 ) continue;
		
		auto r = 1 + solve2( r_g, r_ps[ i .. $ ], cs[ i .. $ ], us[ i .. $ ] );
		if( r < r_min ) r_min = r;
	}
	
	return r_min;
}
