using System;
using System.Collections.Generic;
using System.Linq;
using BitArray = System.Collections.BitArray;
using BigInteger = System.Numerics.BigInteger;

namespace AtCoderProject
{
    struct Index : IEquatable<Index>
    {
        public int h;
        public int w;
        public Index(int i, int j)
        {
            this.h = i;
            this.w = j;
        }

        public bool Equals(Index other) => this.h == other.h && this.w == other.w;
    }
    public class Program
    {
        public static string WriteBoard(bool[,,] board, int i, int H, int W)
        {
            var sb = new System.Text.StringBuilder();
            for (int h = 0; h < H; h++)
            {
                for (int w = 0; w < W; w++)
                    sb.Append(board[i, h, w] ? 'Y' : 'N');
                sb.AppendLine();
            }
            return sb.ToString();
        }
        public object Calc()
        {
            var line = consoleReader.SplitInt32();
            var N = line[0];
            var A = line[1];
            var B = line[2];
            var C = line[3];
            var ls = consoleReader.RepeatInt32(N).ToArray();


            var min = int.MaxValue;
            for (int i = 0; i < (int)Math.Pow(4, N); i++)
            {
                var num = i;
                int amari;


                var a = 0;
                var b = 0;
                var c = 0;
                var aCount = 0;
                var bCount = 0;
                var cCount = 0;
                for (int f = 0; f < N; f++)
                {
                    num = Math.DivRem(num, 4, out amari);
                    switch (amari)
                    {
                        case 0:
                            a += ls[f];
                            aCount++;
                            break;
                        case 1:
                            b += ls[f];
                            bCount++;
                            break;
                        case 2:
                            c += ls[f];
                            cCount++;
                            break;
                        default:
                            break;
                    }
                }

                if (aCount == 0 || bCount == 0 || cCount == 0) continue;

                var mergePoint = --aCount * 10 + --bCount * 10 + --cCount * 10;
                var point = mergePoint + CalcPoint(A, B, C, a, b, c);
                if (point < min)
                    min = point;
            }

            return min;
        }

        int CalcPoint(int A, int B, int C, int num1, int num2, int num3)
        {
            var l = new[] { num1, num2, num3 };
            Array.Sort(l);
            return Math.Abs(A - l[2]) + Math.Abs(B - l[1]) + Math.Abs(C - l[0]);
        }


        const int mod = 1000000007;
        private readonly ConsoleReader consoleReader;
        public Program() : this(new ConsoleReader()) { }
        public Program(ConsoleReader consoleReader) { this.consoleReader = consoleReader; }
        static void Main() => Console.WriteLine(new Program().Calc());
    }

    public class ConsoleReader
    {
        public virtual string String() => Console.ReadLine();
        public int Int32() => int.Parse(String());
        public long Int64() => long.Parse(String());
        public ulong UInt64() => ulong.Parse(String());
        public double Double() => double.Parse(String());
        public string[] Split() => String().Split().ToArray();
        public int[] SplitInt32() => String().Split().Select(s => int.Parse(s)).ToArray();
        public long[] SplitInt64() => String().Split().Select(s => long.Parse(s)).ToArray();
        public ulong[] SplitUInt64() => String().Split().Select(s => ulong.Parse(s)).ToArray();
        public double[] SplitDouble() => String().Split().Select(s => double.Parse(s)).ToArray();

        public IEnumerable<string> Repeat(int count)
        {
            for (int i = 0; i < count; i++)
                yield return String();
        }
        public IEnumerable<int> RepeatInt32(int count)
        {
            for (int i = 0; i < count; i++)
                yield return Int32();
        }
        public IEnumerable<long> RepeatInt64(int count)
        {
            for (int i = 0; i < count; i++)
                yield return Int64();
        }
        public IEnumerable<string[]> RepeatSplit(int count)
        {
            for (int i = 0; i < count; i++)
                yield return Split();
        }
        public IEnumerable<int[]> RepeatSplitInt32(int count)
        {
            for (int i = 0; i < count; i++)
                yield return SplitInt32();
        }
    }
    static class DicExt
    {
        public static V GetOrDefault<K, V>(this Dictionary<K, V> dic, K key, V defaultValue = default(V))
        {
            V val;
            return dic.TryGetValue(key, out val) ? val : defaultValue;
        }
    }
}


Measured memory_bytes: 13396