fun main(args: Array<String>) {
  val (D, G) = readInts()
  val PC = (1..D).map { readInts() }

  var min = Int.MAX_VALUE
  val b = Array(D) { false }

  fun f(): Int {
    var n = 0
    var g = G
    for (i in 0 until D) {
      if (b[i]) {
        val (p, c) = PC[i]
        val base = (i + 1) * 100
        n += p
        g -= c
        g -= p * base
      }
    }
    if (g <= 0) {
      return n
    }
    for (i in D - 1 downTo 0) {
      if (!b[i]) {
        val (p, c) = PC[i]
        val base = (i + 1) * 100
        val v = Math.min(g / base, p)
        n += v
        g -= v * base
        if (g <= 0) {
          return n
        }
      }
    }
    return n
  }

  fun dfs(i: Int) {
    if (i == D) {
      min = Math.min(f(), min)
    } else {
      b[i] = true
      dfs(i + 1)
      b[i] = false
      dfs(i + 1)
    }
  }
  dfs(0)

  println(min)
}

fun myBinarySearch(begin: Int, end: Int, isOk: (key: Int) -> Boolean): Int {
  var ng = begin
  var ok = end

  while (Math.abs(ok - ng) > 1) {
    val mid = (ok + ng) / 2
    if (isOk(mid)) {
      ok = mid
    } else {
      ng = mid
    }
  }

  return ok
}

fun <T> List<T>.myBinarySearch(isOk: (T) -> Boolean): Int {
  return myBinarySearch(-1, size) { index -> isOk(get(index)) }
}

fun <T> Array<T>.myBinarySearch(isOk: (T) -> Boolean): Int {
  return myBinarySearch(-1, size) { index -> isOk(get(index)) }
}

fun readString() = readLine()!!
fun readStrings() = readString().split(" ")
fun readInt() = readString().toInt()
fun readLong() = readString().toLong()
fun readInts() = readStrings().map { it.toInt() }
fun readLongs() = readStrings().map { it.toLong() }
