import std.stdio, std.conv, std.string;
import std.algorithm, std.array, std.container;
import std.numeric, std.math;
import core.bitop;

string my_readln() { return chomp(readln()); }

long mod = pow(10, 9) + 7;
long moda(long x, long y) { return (x + y) % mod; }
long mods(long x, long y) { return ((x + mod) - (y % mod)) % mod; }
long modm(long x, long y) { return (x * y) % mod; }

void main()
{
	auto tokens = my_readln.split;
	auto D = tokens[0].to!long;
	auto G = tokens[1].to!long;

	ulong[] p, c;
	double[] avg;
	foreach (i; 0..D)
	{
		auto tokens2 = my_readln.split;
		p ~= tokens2[0].to!ulong;
		c ~= tokens2[1].to!ulong;
		avg ~= cast(double)c[$-1] / p[$-1] + (i + 1) * 100;
	}
	auto index = new ulong[](avg.length);
	makeIndex!("a > b")(avg, index);
	ulong base;
	ulong[] ans;

	foreach (ii, i; index)
	{
		ulong j;
		foreach (i2; index[ii..$])
		{
			j = max(j, i2);
		}
		auto y = G / ((j + 1) * 100) + (G % ((j + 1) * 100) == 0 ? 0 : 1);
		if (y <= p[j]) ans ~= base + y;

		auto x = p[i] * (i + 1) * 100 + c[i];
		if (x <= G)
		{
			G -= x;
			base += p[i];
		}
		else
		{
			ans ~= base + p[i];
		}
	}
	ans.sort();

	writeln(ans[0]);
	stdout.flush();
}