using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Practice
{
    class Program
    {
        private static int ReadAndParseInt()
        {
            return int.Parse(Console.ReadLine());
        }
        private static int[] ReadAndParseIntArr()
        {
            return Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
        }
        private static long ReadAndParseLong()
        {
            return long.Parse(Console.ReadLine());
        }
        private static long[] ReadAndParseLongArr()
        {
            return Array.ConvertAll(Console.ReadLine().Split(' '), long.Parse);
        }
        static void Main(string[] args)
        {
            //SolveA(args);
            //SolveB(args);
            SolveC(args);
            //SolveD(args);


        }


        private struct Result
        {
            public int cnt;// 回数
            public int point;// 100で割った点数
            public Result(int cnt, int point)
            {
                this.cnt = cnt;
                this.point = point;
            }
        }
        private static void SolveC(string[] args)
        {
            int[] dg = ReadAndParseIntArr();
            int d = dg[0];
            int g = dg[1];
            int[] p = new int[d];
            int[] c = new int[d];
            for(int i=0;i<d;++i)
            {
                int[] pc = ReadAndParseIntArr();
                p[i] = pc[0];
                c[i] = pc[1];
            }

            // 全解きの組み合わせパターンを網羅するで
            List<Result> resList = new List<Practice.Program.Result>();
            int trymax = (int)Math.Pow(2, d);
            for(
                int i=0;i<trymax;++i)
            {
                int point = 0;
                int cnt = 0;
                Calc(i, d, g, p, c, ref point, ref cnt);
                if (point >= g)
                {
                    resList.Add(new Result(cnt, point));
                }
            }

            // 最小の回数を求める
            int min = resList.Min(res => res.cnt);
            Console.WriteLine(min);
        }

        private static void Calc(int bit, int d, int g, int[] p, int[] c, ref int point, ref int cnt)
        {
            point = 0;
            cnt = 0;
            // 全解きの点数を評価
            for(int i=0;i<d;++i)
            {
                if( (bit & (1 << i)) != 0)
                {
                    point += 100 * (i + 1) * p[i] + c[i];
                    cnt += p[i];
                }
            }

            if( point >= g)
            {
                return;
            }

            // 足りないので高得点問題を足していく
            for(int i= d-1;i>=0;--i)
            {
                if( (bit & (1 << i)) == 0)
                {
                    int maxCnt = p[i] - 1;// 全解きにならない最大問題数
                    // 1個１個足して目標達成か判定
                    int tmpCnt = 0;
                    while(tmpCnt < maxCnt)
                    {
                        point += 100 * (i + 1) ;
                        cnt += 1;
                        tmpCnt += 1;
                        if( point >= g)
                        {
                            return;
                        }
                    }
                }
            }

            // えっ gに達してないの？　この全解きは間違いだわぁ

        }
    }
}


Measured memory_bytes: 13396