using System;
using System.Collections.Generic;
using System.Linq;

class Program {
    static int N;

    static List<(int length, int num)> now = new List<(int length, int num)>();
    static int[] l;
    static int[] len = new int[3];

    static int ans;

    static void Main(string[] args) {
        int[] st = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
        N = st[0];

        //A, B, Cを配列で持つことで、ループ処理を可能にする
        len[0] = st[1];
        len[1] = st[2];
        len[2] = st[3];

        l = new int[N];
        for (int i = 0; i < N; i++) {
            l[i] = int.Parse(Console.ReadLine());
        }

        //解答となる数値
        ans = int.MaxValue;

        now.Add((0, 0));
        now.Add((0, 0));
        now.Add((0, 0));
        now.Add((0, 0));

        dfs(0, l);

        Console.WriteLine(ans);
    }

    static void dfs(int depth, int[] l) {
        if (depth < N) {
            //各竹について、4つのグループに入る可能性がある
            for (int i = 0; i < 4; i++) {
                now[i] = (now[i].length + l[depth], now[i].num + 1);

                dfs(depth + 1, l);
                //抜けたら選択を戻す
                now[i] = (now[i].length - l[depth], now[i].num - 1);
            }
        } else {
            int tmp = 0;
            for (int i = 0; i < 3; i++) {
                if (now[i].num == 0) {
                    return;
                }
                tmp += Math.Abs(len[i] - now[i].length) + 10 * (now[i].num - 1);
            }
            ans = Math.Min(ans, tmp);
        }
    }
}