# Original solution
N, A, B, C = list(map(int, input().split()))
L = [int(eval(input())) for _ in range(N)]
#L1～LNはL[0]~L[N-1]で取り出す。よってこれから竹1~Nのことを竹0~N-1と呼ぶ。

#作られるべきA,B,Cが自らの材料として選んだ竹を、集合memA, memB, memCに格納？

#メンバーの選び方[0]~[255]の「[合計初期サイズ, 本数]」を格納するリスト
initialSum = []
for i in range(2**N): #全てのフラグパターンについて計算する
    nowsum = 0
    nowbamboocnt = 0
    for j in range(N): #2^(j+1)乗で割った余りが2^j以上なら、フラグjがTrue
        if i % (2**(j+1)) >= 2**j:
            nowbamboocnt += 1
            nowsum += L[j] #j(0-N-1)本目の竹について見ているので、L[j]が今見ている竹の長さ
    initialSum.append([nowsum, nowbamboocnt])

#テスト用→ print(initialSum)

#A,B,Cが竹を選んだ場合の所要MPを出し、最低値とその時の組み合わせをminに格納する
bambooset = {i for i in range(N)} #存在する竹の組み合わせ
min = 3000 #最低値の初期化

lestbamboo = bambooset.copy() #残っている竹

for i, initSumA in enumerate(initialSum): #i:0~255。initsumA[0]は初期合計サイズ, initsumA[1]は本数
#Aはこのfor文で既に選ばれていると考えればいい。
    if initSumA[1] ==0 or N - initSumA[1] < 2: continue #竹が0とか、残り竹が0,1なら飛ばす
    lestbamboo = bambooset.copy() #再初期化
    for j in range(N): #使った竹はlestbambooからremove
        if i % (2**(j+1)) >= 2**j: #j(0-N-1)本目の竹について考えている
            lestbamboo.remove(j)
    necesMPforA = abs(A - initSumA[0]) + (initSumA[1]-1)*10 #abs(目標-合計)-合成必要MP

    #次はBを計算する。Bが取らなかったものの中からCが取る
    for b in range(2**len(lestbamboo)): #残った竹それぞれにつき取るか取らないか選ぶ
    #2*残り本数通りある。ex.3本残っているとして、b(000とか101とか)で、Bの選び方を示す
        lestbambooList = list(lestbamboo) #リスト化する [0]~[本数-1]。値は竹番号[0-N]
        #lestbambooListは自動的に昇順になっている
        bamboocntB = 0 #Bの本数
        nowsumB = 0
        lestbambooforC = lestbamboo.copy() #Cのための残り竹を入れる
        for k in range(len(lestbambooList)): #2^(k+1)乗で割った余りが2^k以上なら、フラグkがTrue
            if b % (2**(k+1)) >= 2**k: #Bがとる場合
                bamboocntB += 1
                nowsumB += L[lestbambooList[k]] #竹番号はlestbambooList[k]に入っている
                lestbambooforC.remove(lestbambooList[k])
        if bamboocntB == 0: continue #0本だと駄目なので飛ばす

        for m in range(2**len(lestbambooforC)): #残った竹それぞれにつき取るか取らないか
        #このfor文終了1回につき、ABCそれぞれの組み合わせが1つ終了！
        # →このループの終了時にminの判定を行う
            lestbambooforCList = list(lestbambooforC) #やっぱりリスト化
            bamboocntC = 0
            nowsumC = 0
            for n in range(len(lestbambooforCList)):
                if m % (2**(n+1)) >= 2**n: #Cがとる場合
                    bamboocntC += 1
                    nowsumC += L[lestbambooforCList[n]] #竹番号はlestbambooListforC[n]に入っている
            if bamboocntC == 0: continue #0本だと駄目なので飛ばす

            nowTotalSum = necesMPforA + abs(B - nowsumB) + (bamboocntB-1)*10 + abs(C - nowsumC) + (bamboocntC-1)*10
            #minの判定！
            if nowTotalSum < min: min = nowTotalSum

print(min)

# Optimized solution
N, A, B, C = list(map(int, input().split()))
L = [int(eval(input())) for _ in range(N)]
#L1～LNはL[0]~L[N-1]で取り出す。よってこれから竹1~Nのことを竹0~N-1と呼ぶ。

#メンバーの選び方[0]~[255]の「[合計初期サイズ, 本数]」を格納するリスト
initialSum = []
for i in range(2**N): #全てのフラグパターンについて計算する
    nowsum = 0
    nowbamboocnt = 0
    for j in range(N): #2^(j+1)乗で割った余りが2^j以上なら、フラグjがTrue
        if i % (2**(j+1)) >= 2**j:
            nowbamboocnt += 1
            nowsum += L[j] #j(0-N-1)本目の竹について見ているので、L[j]が今見ている竹の長さ
    initialSum.append([nowsum, nowbamboocnt])


#A,B,Cが竹を選んだ場合の所要MPを出し、最低値をminに格納する
bambooset = {i for i in range(N)} #存在する竹の組み合わせ
min = 3000 #最低値の初期化

lestbamboo = bambooset.copy() #残っている竹

for i, initSumA in enumerate(initialSum): #i:0~255。initsumA[0]は初期合計サイズ, initsumA[1]は本数
#Aはこのfor文で既に選ばれていると考えればいい。
    if initSumA[1] ==0 or N - initSumA[1] < 2: continue #竹が0とか、残り竹が0,1なら飛ばす
    lestbamboo = bambooset.copy() #再初期化
    for j in range(N): #使った竹はlestbambooからremove
        if i % (2**(j+1)) >= 2**j: #j(0-N-1)本目の竹について考えている
            lestbamboo.remove(j)
    necesMPforA = abs(A - initSumA[0]) + (initSumA[1]-1)*10 #abs(目標-合計)-合成必要MP

    #次はBを計算する。Bが取らなかったものの中からCが取る
    for b in range(2**len(lestbamboo)): #残った竹それぞれにつき取るか取らないか選ぶ
    #2*残り本数通りある。ex.3本残っているとして、b(000とか101とか)で、Bの選び方を示す
        lestbambooList = list(lestbamboo) #リスト化する [0]~[本数-1]。値は竹番号[0-N]
        #lestbambooListは自動的に昇順になっている
        bamboocntB = 0 #Bの本数
        nowsumB = 0
        lestbambooforC = lestbamboo.copy() #Cのための残り竹を入れる
        for k in range(len(lestbambooList)): #2^(k+1)乗で割った余りが2^k以上なら、フラグkがTrue
            if b % (2**(k+1)) >= 2**k: #Bがとる場合
                bamboocntB += 1
                nowsumB += L[lestbambooList[k]] #竹番号はlestbambooList[k]に入っている
                lestbambooforC.remove(lestbambooList[k])
        if bamboocntB == 0: continue #0本だと駄目なので飛ばす

        for m in range(2**len(lestbambooforC)): #残った竹それぞれにつき取るか取らないか
        #このfor文終了1回につき、ABCそれぞれの組み合わせが1つ終了！
        # →このループの終了時にminの判定を行う
            lestbambooforCList = list(lestbambooforC) #やっぱりリスト化
            bamboocntC = 0
            nowsumC = 0
            for n in range(len(lestbambooforCList)):
                if m % (2**(n+1)) >= 2**n: #Cがとる場合
                    bamboocntC += 1
                    nowsumC += L[lestbambooforCList[n]] #竹番号はlestbambooListforC[n]に入っている
            if bamboocntC == 0: continue #0本だと駄目なので飛ばす

            nowTotalSum = necesMPforA + abs(B - nowsumB) + (bamboocntB-1)*10 + abs(C - nowsumC) + (bamboocntC-1)*10
            #minの判定！
            if nowTotalSum < min: min = nowTotalSum

print(min)