Problem:
Heat Stroke

　
We have had record hot temperatures this summer. To avoid heat stroke, you decided to buy a quantity of drinking water at the nearby supermarket. Two types of bottled water, 1 and 0.5 liter, are on sale at respective prices there. You have a definite quantity in your mind, but are willing to buy a quantity larger than that if: no combination of these bottles meets the quantity, or, the total price becomes lower.

Given the prices for each bottle of water and the total quantity needed, make a program to seek the lowest price to buy greater than or equal to the quantity required.

Input

The input is given in the following format.

$A$ $B$ $X$

The first line provides the prices for a 1-liter bottle $A$ ($1\leq A \leq 1000$), 500-milliliter bottle $B$ ($1 \leq B \leq 1000$), and the total water quantity needed $X$ ($1 \leq X \leq 20000$). All these values are given as integers, and the quantity of water in milliliters.

Output

Output the total price.

Sample Input 1

180 100 2400

Sample Output 1

460

Sample Input 2

200 90 2018

Sample Output 2

450

Solution in Scala (judge verdict: Accepted)

object Main extends App {
  import scala.io.StdIn._

  val Array(a, b, x) = readLine.trim.split(' ').map(_.toInt)
  println(
    search(a, b, x)
  )
  def search(a: Int, b: Int, x: Int)(implicit memo: Array[Int] = Array.tabulate(x + 1){_ ⇒ -1}): Int = {
    if (x <= 0) 0
    else if (memo(x) > 0) memo(x)
    else math.min(search(a, b, x - 1000) + a, search(a, b, x - 500) + b).also(p ⇒ memo(x) = p)
  }
  implicit class ScopeFunc[T](value: T){
    def let[A](func: T ⇒ A): A = func(value)
    def also(func: T ⇒ Unit): T = {
      func(value)
      value
    }
  }
}