object main{ object Solver extends InputReader{ def solve(){ val mx = 30 val vs = for(_ <- 1 to 4) yield getInt() val ans = for( a <- 1 to 30; b <- 1 to a; c <- 1 to b ) yield { val dp = Array.fill(mx + 1)(1000) dp(0) = 0 for( p <- List(a, b, c); i <- 0 to (mx - p) ){ dp(i + p) = dp(i + p) min (dp(i) + 1) } vs.map(dp(_)).sum } println(ans.min) } } // TEMPLATE ------------------------ def main(args: Array[String]){ Solver.solve() } trait InputReader{ import java.io._ import java.util._ protected val stream = System.in private val reader = new BufferedReader(new InputStreamReader(stream)) private var tokenizer = new StringTokenizer(reader.readLine()) def getStr(): String = { while(!tokenizer.hasMoreTokens()) tokenizer = new StringTokenizer(reader.readLine()) tokenizer.nextToken() } def getInt(): Int = getStr().toInt def getLong(): Long = getStr().toLong def getDouble(): Double = getStr().toDouble } }