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

L=[0]*N

for i in range(N):

  L[i]=int(eval(input()))



# ある竹を,Aに使う、Bに使う、Cに使う、どれにも使わない　の4パターンで全探索

# A,B,C	それぞれに対して2つ目以降は10Pかかる



stack=[]

# Aの長さ、Bの長さ、Cの長さ、処理した竹の本数、消費MP

stack.append([0,0,0,0,0])

ans=1000*10

while stack:

  a,b,c,num,mp=stack.pop()

  if num==N:

    if a==0 or b==0 or c==0:

      continue

    mp+=abs(A-a)+abs(B-b)+abs(C-c)

    if mp<ans:

      ans=mp

    continue

  for i in range(4):

    if i==0:

      stack.append([a+L[num],b,c,num+1,mp+(a!=0)*10])

    if i==1:

      stack.append([a,b+L[num],c,num+1,mp+(b!=0)*10])

    if i==2:

      stack.append([a,b,c+L[num],num+1,mp+(c!=0)*10])

    if i==3:

      stack.append([a,b,c,num+1,mp])

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

L=[0]*N

for i in range(N):

  L[i]=int(eval(input()))



# ある竹を,Aに使う、Bに使う、Cに使う、どれにも使わない　の4パターンで全探索

# A,B,C	それぞれに対して2つ目以降は10Pかかる



stack=[]

# Aの長さ、Bの長さ、Cの長さ、処理した竹の本数、消費MP

stack.append([0,0,0,0,0])

ans=1000*10

while stack:

  a,b,c,num,mp=stack.pop()

  if num==N:

    if a==0 or b==0 or c==0:

      continue

    mp+=abs(A-a)+abs(B-b)+abs(C-c)

    if mp<ans:

      ans=mp

    continue

  stack.append([a+L[num],b,c,num+1,mp+(a!=0)*10])

  stack.append([a,b+L[num],c,num+1,mp+(b!=0)*10])

  stack.append([a,b,c+L[num],num+1,mp+(c!=0)*10])

  stack.append([a,b,c,num+1,mp])

print(ans)
N, A, B, C = list(map(int, input().split()))
L = [0] * N
for i in range(N):
    L[i] = int(eval(input()))
# ある竹を,Aに使う、Bに使う、Cに使う、どれにも使わない　の4パターンで全探索
# A,B,C	それぞれに対して2つ目以降は10Pかかる
stack = []
# Aの長さ、Bの長さ、Cの長さ、処理した竹の本数、消費MP
stack.append([0, 0, 0, 0, 0])
ans = 1000 * 10
while stack:
    a, b, c, num, mp = stack.pop()
    if num == N:
        if a == 0 or b == 0 or c == 0:
            continue
        mp += abs(A - a) + abs(B - b) + abs(C - c)
        if mp < ans:
            ans = mp
        continue
    for i in range(4):
        if i == 0:
            stack.append([a + L[num], b, c, num + 1, mp + (a != 0) * 10])
        if i == 1:
            stack.append([a, b + L[num], c, num + 1, mp + (b != 0) * 10])
        if i == 2:
            stack.append([a, b, c + L[num], num + 1, mp + (c != 0) * 10])
        if i == 3:
            stack.append([a, b, c, num + 1, mp])
print(ans)

N, A, B, C = list(map(int, input().split()))
L = [0] * N
for i in range(N):
    L[i] = int(eval(input()))
# ある竹を,Aに使う、Bに使う、Cに使う、どれにも使わない　の4パターンで全探索
# A,B,C	それぞれに対して2つ目以降は10Pかかる
stack = []
# Aの長さ、Bの長さ、Cの長さ、処理した竹の本数、消費MP
stack.append([0, 0, 0, 0, 0])
ans = 1000 * 10
while stack:
    a, b, c, num, mp = stack.pop()
    if num == N:
        if a == 0 or b == 0 or c == 0:
            continue
        mp += abs(A - a) + abs(B - b) + abs(C - c)
        if mp < ans:
            ans = mp
        continue
    stack.append([a + L[num], b, c, num + 1, mp + (a != 0) * 10])
    stack.append([a, b + L[num], c, num + 1, mp + (b != 0) * 10])
    stack.append([a, b, c + L[num], num + 1, mp + (c != 0) * 10])
    stack.append([a, b, c, num + 1, mp])
print(ans)

-    for i in range(4): -        if i == 0: -            stack.append([a + L[num], b, c, num + 1, mp + (a != 0) * 10]) -        if i == 1: -            stack.append([a, b + L[num], c, num + 1, mp + (b != 0) * 10]) -        if i == 2: -            stack.append([a, b, c + L[num], num + 1, mp + (c != 0) * 10]) -        if i == 3: -            stack.append([a, b, c, num + 1, mp]) +    stack.append([a + L[num], b, c, num + 1, mp + (a != 0) * 10]) +    stack.append([a, b + L[num], c, num + 1, mp + (b != 0) * 10]) +    stack.append([a, b, c + L[num], num + 1, mp + (c != 0) * 10]) +    stack.append([a, b, c, num + 1, mp])