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 10 ** 9

    """ 
    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 + banboos[cur], b, c) + 10
    ret2 = dfs(cur + 1, a, b + banboos[cur], c) + 10
    ret3 = dfs(cur + 1, a, b, c + banboos[cur]) + 10
    return min(ret0, ret1, ret2, ret3)


# input
N, A, B, C = map(int, input().split())
banboos = [int(input()) for i in range(N)]

print(dfs(0, 0, 0, 0)) 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 10 ** 9

    """ 
    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 + banboos[cur], b, c) + 10
    ret2 = dfs(cur + 1, a, b + banboos[cur], c) + 10
    ret3 = dfs(cur + 1, a, b, c + banboos[cur]) + 10
    return min(ret0, ret1, ret2, ret3)


# input dfs """
    深さが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 10 ** 9

     cur == N cur N return abs(a - A) + abs(b - B) + abs(c - C) - 30 if min(a, b, c) > 0 else 10 ** 9 abs(a - A) + abs(b - B) + abs(c - C) - 30 if min(a, b, c) > 0 else 10 ** 9 min(a, b, c) > 0 min(a, b, c) min a b c 0 abs(a - A) + abs(b - B) + abs(c - C) - 30 abs(a - A) + abs(b - B) + abs(c - C) abs(a - A) + abs(b - B) abs(a - A) abs a - A a A abs(b - B) abs b - B b B abs(c - C) abs c - C c C 30 10 ** 9 10 9 """ 
    cur番目の竹に対して
        ret0:ABCどれにも使わない
        ret1:Aに使う（合成:MP+10）
        ret2:Bに使う（合成:MP+10）
        ret3:Cに使う（合成:MP+10）
    """ ret0 = dfs(cur + 1, a, b, c) ret0 dfs(cur + 1, a, b, c) dfs cur + 1 cur 1 a b c ret1 = dfs(cur + 1, a + banboos[cur], b, c) + 10 ret1 dfs(cur + 1, a + banboos[cur], b, c) + 10 dfs(cur + 1, a + banboos[cur], b, c) dfs cur + 1 cur 1 a + banboos[cur] a banboos[cur] banboos cur b c 10 ret2 = dfs(cur + 1, a, b + banboos[cur], c) + 10 ret2 dfs(cur + 1, a, b + banboos[cur], c) + 10 dfs(cur + 1, a, b + banboos[cur], c) dfs cur + 1 cur 1 a b + banboos[cur] b banboos[cur] banboos cur c 10 ret3 = dfs(cur + 1, a, b, c + banboos[cur]) + 10 ret3 dfs(cur + 1, a, b, c + banboos[cur]) + 10 dfs(cur + 1, a, b, c + banboos[cur]) dfs cur + 1 cur 1 a b c + banboos[cur] c banboos[cur] banboos cur 10 return min(ret0, ret1, ret2, ret3) min(ret0, ret1, ret2, ret3) min ret0 ret1 ret2 ret3 cur cur a a b b c c N, A, B, C = map(int, input().split()) N map(int, input().split()) map int input().split() ().split () input split A B C int(input()) for i in range(N) for i in range(N) i range(N) range N for i in range(N) int(input()) int input() input banboos = [int(input()) for i in range(N)] banboos [int(input()) for i in range(N)] print(dfs(0, 0, 0, 0)) print dfs(0, 0, 0, 0) dfs 0 0 0 0 B, C = map(int, input().split()) map(int, input().split()) B A, B, C = map(int, input().split()) map(int, input().split()) A 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 10 ** 9

    """ 
    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 + banboos[cur], b, c) + 10
    ret2 = dfs(cur + 1, a, b + banboos[cur], c) + 10
    ret3 = dfs(cur + 1, a, b, c + banboos[cur]) + 10
    return min(ret0, ret1, ret2, ret3)


# input 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 10 ** 9

    """ 
    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 + banboos[cur], b, c) + 10
    ret2 = dfs(cur + 1, a, b + banboos[cur], c) + 10
    ret3 = dfs(cur + 1, a, b, c + banboos[cur]) + 10
    return min(ret0, ret1, ret2, ret3)


# input dfs C = map(int, input().split()) map(int, input().split()) C banboos = [int(input()) for i in range(N)] [int(input()) for i in range(N)] banboos N, A, B, C = map(int, input().split()) map(int, input().split()) N
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 10 ** 9

    """ 
    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 + banboos[cur], b, c) + 10
    ret2 = dfs(cur + 1, a, b + banboos[cur], c) + 10
    ret3 = dfs(cur + 1, a, b, c + banboos[cur]) + 10
    return min(ret0, ret1, ret2, ret3)


# input
N, A, B, C = map(int, input().split())
banboos = [int(input()) for i in range(N)]

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