N, A, B, C = map(int, input().split())
lst = [int(input()) for _ in range(N)]

#lst.sort(reverse =True) #大きいものが先に来ている

INF = 10 ** 9

def dfs(count, a, b, c): #count: 今回考える棒の番号, a, (b, c): A, (B,C) の棒を作るのに使う棒の長さの合計
    if count == N: #最後まで各竹をa, b, cに割り振り終わったら…
        if min(a,b,c) < 0: #A, B, C用の竹が少なくともそれぞれ1本以上必要、それが満たされていないとき
            return INF #とりあえず大きな数を返しとく
        else:
            return abs(a-A)+abs(b-B)+abs(c-C)-30 
        #使う棒の合計の長さ(a, b, c)と目標とする長さ(A, B, C)の差の絶対値-各棒1本目のつなぐのに必要なMP(10 * 3)を除く
    ret0 = dfs(count+1, a, b, c) #count番目の竹を使わない-->countのみ1つ進める
    ret1 = dfs(count+1, a+lst[count], b, c) + 10 #count番目の竹をAに使う。つなぐ文、必要なMPを+10する
    ret2 = dfs(count+1, a, b+lst[count], c) + 10 #count番目の竹をBに使う。つなぐ文、必要なMPを+10する
    ret3 = dfs(count+1, a, b, c+lst[count]) + 10 #count番目の竹をCに使う。つなぐ文、必要なMPを+10する
    return min(ret0, ret1, ret2, ret3)

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