import itertools

n,*abc=list(map(int,input().split()))

l=[int(eval(input())) for i in range(n)]

inf=100000000000000

mi=inf

for i in list(itertools.product([i for i in range(3)],repeat=n)):#(1)↓

    sub=[[] for j in range(3)]

    for j in range(n):

        sub[i[j]].append(j)

    mi_sub=0

    for j in range(3):

        l_sub=len(sub[j])

        if l_sub==0:#(2)

            mi_sub=inf

            break

        mi_subsub=inf

        for k in range(2**l_sub):#(3)↓

            mi_subsubsub=[0,0]

            for l_subsub in range(l_sub):#(5)↓

                if ((k>>l_subsub) &1):

                    mi_subsubsub[0]+=1

                    mi_subsubsub[1]+=l[sub[j][l_subsub]]

            if mi_subsubsub[0]!=0:#(4)

                mi_subsub=min(mi_subsub,abs(mi_subsubsub[1]-abc[j])+mi_subsubsub[0]*10-10)

        mi_sub+=mi_subsub

    mi=min(mi,mi_sub)

print(mi)
N, A, B, C = list(map(int, input().split()))

l = [int(eval(input())) for i in range(N)]

INF = 10 ** 9



def dfs(cur, a, b, c):

    '''

    深さがNだったら使用MPを評価

    N本の竹を使うときに必要な合成回数はN-1のため，最後に-1*10*3(?)

    1本も竹を使用していなかったら棄却→MPを無限に使うこととしている

    '''

    if cur == N:

        return abs(a - A) + abs(b - B) + abs(c - C) - 30 if min(a, b, c) > 0 else INF



    '''

    cur番目の竹に対して

        ret0:ABCどれにも使わない

        ret1:Aに使う（合成:MP+10）

        ret2:Bに使う（合成:MP+10）

        ret3:Cに使う（合成:MP+10）

    '''

    ret0 = dfs(cur + 1, a, b, c)

    ret1 = dfs(cur + 1, a + l[cur], b, c) + 10

    ret2 = dfs(cur + 1, a, b + l[cur], c) + 10

    ret3 = dfs(cur + 1, a, b, c + l[cur]) + 10

    return min(ret0, ret1, ret2, ret3)

print((dfs(0, 0, 0, 0)))
import itertools

n, *abc = list(map(int, input().split()))
l = [int(eval(input())) for i in range(n)]
inf = 100000000000000
mi = inf
for i in list(itertools.product([i for i in range(3)], repeat=n)):  # (1)↓
    sub = [[] for j in range(3)]
    for j in range(n):
        sub[i[j]].append(j)
    mi_sub = 0
    for j in range(3):
        l_sub = len(sub[j])
        if l_sub == 0:  # (2)
            mi_sub = inf
            break
        mi_subsub = inf
        for k in range(2**l_sub):  # (3)↓
            mi_subsubsub = [0, 0]
            for l_subsub in range(l_sub):  # (5)↓
                if (k >> l_subsub) & 1:
                    mi_subsubsub[0] += 1
                    mi_subsubsub[1] += l[sub[j][l_subsub]]
            if mi_subsubsub[0] != 0:  # (4)
                mi_subsub = min(
                    mi_subsub, abs(mi_subsubsub[1] - abc[j]) + mi_subsubsub[0] * 10 - 10
                )
        mi_sub += mi_subsub
    mi = min(mi, mi_sub)
print(mi)

N, A, B, C = list(map(int, input().split()))
l = [int(eval(input())) for i in range(N)]
INF = 10**9


def dfs(cur, a, b, c):
    """
    深さがNだったら使用MPを評価
    N本の竹を使うときに必要な合成回数はN-1のため，最後に-1*10*3(?)
    1本も竹を使用していなかったら棄却→MPを無限に使うこととしている
    """
    if cur == N:
        return abs(a - A) + abs(b - B) + abs(c - C) - 30 if min(a, b, c) > 0 else INF
    """
    cur番目の竹に対して
        ret0:ABCどれにも使わない
        ret1:Aに使う（合成:MP+10）
        ret2:Bに使う（合成:MP+10）
        ret3:Cに使う（合成:MP+10）
    """
    ret0 = dfs(cur + 1, a, b, c)
    ret1 = dfs(cur + 1, a + l[cur], b, c) + 10
    ret2 = dfs(cur + 1, a, b + l[cur], c) + 10
    ret3 = dfs(cur + 1, a, b, c + l[cur]) + 10
    return min(ret0, ret1, ret2, ret3)


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

-import itertools +N, A, B, C = list(map(int, input().split())) +l = [int(eval(input())) for i in range(N)] +INF = 10**9 -n, *abc = list(map(int, input().split())) -l = [int(eval(input())) for i in range(n)] -inf = 100000000000000 -mi = inf -for i in list(itertools.product([i for i in range(3)], repeat=n)):  # (1)↓ -    sub = [[] for j in range(3)] -    for j in range(n): -        sub[i[j]].append(j) -    mi_sub = 0 -    for j in range(3): -        l_sub = len(sub[j]) -        if l_sub == 0:  # (2) -            mi_sub = inf -            break -        mi_subsub = inf -        for k in range(2**l_sub):  # (3)↓ -            mi_subsubsub = [0, 0] -            for l_subsub in range(l_sub):  # (5)↓ -                if (k >> l_subsub) & 1: -                    mi_subsubsub[0] += 1 -                    mi_subsubsub[1] += l[sub[j][l_subsub]] -            if mi_subsubsub[0] != 0:  # (4) -                mi_subsub = min( -                    mi_subsub, abs(mi_subsubsub[1] - abc[j]) + mi_subsubsub[0] * 10 - 10 -                ) -        mi_sub += mi_subsub -    mi = min(mi, mi_sub) -print(mi) + +def dfs(cur, a, b, c): +    """ +    深さがNだったら使用MPを評価 +    N本の竹を使うときに必要な合成回数はN-1のため，最後に-1*10*3(?) +    1本も竹を使用していなかったら棄却→MPを無限に使うこととしている +    """ +    if cur == N: +        return abs(a - A) + abs(b - B) + abs(c - C) - 30 if min(a, b, c) > 0 else INF +    """ +    cur番目の竹に対して +        ret0:ABCどれにも使わない +        ret1:Aに使う（合成:MP+10） +        ret2:Bに使う（合成:MP+10） +        ret3:Cに使う（合成:MP+10） +    """ +    ret0 = dfs(cur + 1, a, b, c) +    ret1 = dfs(cur + 1, a + l[cur], b, c) + 10 +    ret2 = dfs(cur + 1, a, b + l[cur], c) + 10 +    ret3 = dfs(cur + 1, a, b, c + l[cur]) + 10 +    return min(ret0, ret1, ret2, ret3) + + +print((dfs(0, 0, 0, 0)))