onst val INF = 1000000000

fun main(args: Array<String>) {
    val (N, A, B ,C) = readLine()!!.split(" ").map { it.toInt() }
    var L = mutableListOf<Int>()
    for (i in 0 until N) {
        L.add(readLine()!!.toInt())
    }

    fun dfs(cur: Int, a: Int, b: Int, c: Int): Int {
        // ４分木(aに使う, bに, cに, 使わない)を探索し，枝まで到達したら, コストを計算して返す
        // 各接点で min なもののみを残していけばよい
        // コスト計算はそれぞれ出来上がったものと，目標とする長さの差分

        // 全ての枝を使うかどうかの判断が終わっている場合は，その組み合わせでのコストを計算
        // それぞれ必ず一つの枝を使うが，その場合，合成していなくても必ず 10 は足されているので -30 する
        // 必ず a, b, c それぞれに一つの枝を割り当てないといけない，割り当てていない場合は INF を返して候補から除外する
        if (cur == N){
            val cost = abs(A - a) + abs(B - b) + abs(C - c) - 30
            return if(min(listOf(a, b, c)) > 0) cost else INF
        }

        // 4つの分岐先のコストをそれぞれ計算
        val one = dfs(cur+1, a, b, c)
        val two = dfs(cur+1, a + L[cur], b, c) + 10
        val three = dfs(cur+1, a, b + L[cur], c) + 10
        val four = dfs(cur+1, a, b, c + L[cur]) + 10

        return min(listOf(one, two, three, four))
    }

    print(dfs(0,0,0,0))
}


fun abs(x: Int): Int{
    return if(x<0) -1 * x else x
}

fun min(x: List<Int>): Int{
    var m = x[0]
    for (v in x) {
        if (m > v) m = v
    }
    return m
}

fun max(x: List<Int>): Int{
    var m = x[0]
    for (v in x) {
        if (m < v) m = v
    }
    return m
}
