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


def dfs(depth, a, b, c):
    if depth == N:
        # A, B, C いずれも竹は1本以上必ず使っていないとだめ
        if min(a, b, c) > 0:
            # 合体が終わったあとで差を計算してそれがコストになる
            return abs(a-A) + abs(b-B) + abs(c-C) - 30
        else:
            return INF

    # 今ある竹を採用しない場合
    ret0 = dfs(depth + 1, a, b, c)

    # A, B, C を使う場合
    # 先にまとめて合体してあとで -30 することによって調整
    ret1 = dfs(depth + 1, a + l[depth], b, c) + 10
    ret2 = dfs(depth + 1, a, b + l[depth], c) + 10
    ret3 = dfs(depth + 1, a, b, c + l[depth]) + 10
    return min(ret0, ret1, ret2, ret3)


print(dfs(0, 0, 0, 0)) int(i) for i in input().split() for i in input().split() i input().split() ().split () input split for i in input().split() int(i) int i N, A, B, C = [int(i) for i in input().split()] N [int(i) for i in input().split()] A B C int(input()) for _ in range(N) for _ in range(N) _ range(N) range N for _ in range(N) int(input()) int input() input l = [int(input()) for _ in range(N)] l [int(input()) for _ in range(N)] INF = 10**9 INF 10**9 10 9 def dfs(depth, a, b, c):
    if depth == N:
        # A, B, C いずれも竹は1本以上必ず使っていないとだめ
        if min(a, b, c) > 0:
            # 合体が終わったあとで差を計算してそれがコストになる
            return abs(a-A) + abs(b-B) + abs(c-C) - 30
        else:
            return INF

    # 今ある竹を採用しない場合
    ret0 = dfs(depth + 1, a, b, c)

    # A, B, C を使う場合
    # 先にまとめて合体してあとで -30 することによって調整
    ret1 = dfs(depth + 1, a + l[depth], b, c) + 10
    ret2 = dfs(depth + 1, a, b + l[depth], c) + 10
    ret3 = dfs(depth + 1, a, b, c + l[depth]) + 10
    return min(ret0, ret1, ret2, ret3) dfs if depth == N:
        # A, B, C いずれも竹は1本以上必ず使っていないとだめ
        if min(a, b, c) > 0:
            # 合体が終わったあとで差を計算してそれがコストになる
            return abs(a-A) + abs(b-B) + abs(c-C) - 30
        else:
            return INF

    # 今ある竹を採用しない場合
     depth == N depth N if min(a, b, c) > 0:
            # 合体が終わったあとで差を計算してそれがコストになる
            return abs(a-A) + abs(b-B) + abs(c-C) - 30
        else:
            return INF

    # 今ある竹を採用しない場合
     min(a, b, c) > 0 min(a, b, c) min a b c 0 return abs(a-A) + abs(b-B) + abs(c-C) - 30 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 return INF INF ret0 = dfs(depth + 1, a, b, c) ret0 dfs(depth + 1, a, b, c) dfs depth + 1 depth 1 a b c ret1 = dfs(depth + 1, a + l[depth], b, c) + 10 ret1 dfs(depth + 1, a + l[depth], b, c) + 10 dfs(depth + 1, a + l[depth], b, c) dfs depth + 1 depth 1 a + l[depth] a l[depth] l depth b c 10 ret2 = dfs(depth + 1, a, b + l[depth], c) + 10 ret2 dfs(depth + 1, a, b + l[depth], c) + 10 dfs(depth + 1, a, b + l[depth], c) dfs depth + 1 depth 1 a b + l[depth] b l[depth] l depth c 10 ret3 = dfs(depth + 1, a, b, c + l[depth]) + 10 ret3 dfs(depth + 1, a, b, c + l[depth]) + 10 dfs(depth + 1, a, b, c + l[depth]) dfs depth + 1 depth 1 a b c + l[depth] c l[depth] l depth 10 return min(ret0, ret1, ret2, ret3) min(ret0, ret1, ret2, ret3) min ret0 ret1 ret2 ret3 depth depth a a b b c c print(dfs(0, 0, 0, 0)) print dfs(0, 0, 0, 0) dfs 0 0 0 0 B, C = [int(i) for i in input().split()] [int(i) for i in input().split()] B l = [int(input()) for _ in range(N)] [int(input()) for _ in range(N)] l C = [int(i) for i in input().split()] [int(i) for i in input().split()] C N, A, B, C = [int(i) for i in input().split()] [int(i) for i in input().split()] N INF = 10**9 10**9 INF def dfs(depth, a, b, c):
    if depth == N:
        # A, B, C いずれも竹は1本以上必ず使っていないとだめ
        if min(a, b, c) > 0:
            # 合体が終わったあとで差を計算してそれがコストになる
            return abs(a-A) + abs(b-B) + abs(c-C) - 30
        else:
            return INF

    # 今ある竹を採用しない場合
    ret0 = dfs(depth + 1, a, b, c)

    # A, B, C を使う場合
    # 先にまとめて合体してあとで -30 することによって調整
    ret1 = dfs(depth + 1, a + l[depth], b, c) + 10
    ret2 = dfs(depth + 1, a, b + l[depth], c) + 10
    ret3 = dfs(depth + 1, a, b, c + l[depth]) + 10
    return min(ret0, ret1, ret2, ret3) def dfs(depth, a, b, c):
    if depth == N:
        # A, B, C いずれも竹は1本以上必ず使っていないとだめ
        if min(a, b, c) > 0:
            # 合体が終わったあとで差を計算してそれがコストになる
            return abs(a-A) + abs(b-B) + abs(c-C) - 30
        else:
            return INF

    # 今ある竹を採用しない場合
    ret0 = dfs(depth + 1, a, b, c)

    # A, B, C を使う場合
    # 先にまとめて合体してあとで -30 することによって調整
    ret1 = dfs(depth + 1, a + l[depth], b, c) + 10
    ret2 = dfs(depth + 1, a, b + l[depth], c) + 10
    ret3 = dfs(depth + 1, a, b, c + l[depth]) + 10
    return min(ret0, ret1, ret2, ret3) dfs A, B, C = [int(i) for i in input().split()] [int(i) for i in input().split()] A
N, A, B, C = [int(i) for i in input().split()]
l = [int(input()) for _ in range(N)]
INF = 10**9


def dfs(depth, a, b, c):
    if depth == N:
        # A, B, C いずれも竹は1本以上必ず使っていないとだめ
        if min(a, b, c) > 0:
            # 合体が終わったあとで差を計算してそれがコストになる
            return abs(a-A) + abs(b-B) + abs(c-C) - 30
        else:
            return INF

    # 今ある竹を採用しない場合
    ret0 = dfs(depth + 1, a, b, c)

    # A, B, C を使う場合
    # 先にまとめて合体してあとで -30 することによって調整
    ret1 = dfs(depth + 1, a + l[depth], b, c) + 10
    ret2 = dfs(depth + 1, a, b + l[depth], c) + 10
    ret3 = dfs(depth + 1, a, b, c + l[depth]) + 10
    return min(ret0, ret1, ret2, ret3)


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