#include <bits/stdc++.h>
using namespace std;
// define
#define int long long
#define UNIQUE(v) v.erase(unique(all(v)), v.end());
#define ZIP(v) sort(all(v)),UNIQUE(v)
#define ADD(a, b) a = (a + b) % mod
#define SUB(a, b) a = (a+mod-b)%mod
#define MUL(a, b) a = (((a)%mod) * ((b)%mod)) % mod
#define rollcall cout << "I'm Sucu." << endl;
#define repi(i,m,n) for(int i = m;i < n;i++)
#define drep(i,n,m) for(int i = n;i >= m;i--)
#define rep(i,n) repi(i,0,n)
#define rrep(i,n) repi(i,1,n+1)
#define chmin(x,y) x = min(x,y)
#define chmax(x,y) x = max(x,y)
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(), v.rend()
#define dmp(x,y) make_pair(x,y)
#define pb(x) push_back(x)
#define pf(x) push_front(x)
#define fi first
#define se second
// debug
template <typename T, typename U>
ostream &operator<<(ostream &os, const pair<T, U> &p){
  os << "(" << p.first << "," << p.second << ")";return os;
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v){
  for (auto it = v.begin();it != v.end();++it){
    if(it != v.begin())os << " ";os << *it;
  }return os;
}
template <typename T, typename U>
ostream &operator<<(ostream &os, const map<T, U> &mp){
  for(auto x: mp)os << "(" << x.first << "," << x.second << ")" << endl;
  return os;
}
template<typename T, int SIZE>
int array_length(const T (&)[SIZE]){return SIZE;}
template<typename T, int N>
void PRINTF(const T (&a)[N], int s = N, int t = -1, bool f = true){
	if(t == -1){rep(i,s){if(i)cout << " ";cout << a[i];}}
	else repi(i,s,t){if(i!=s)cout << " ";cout << a[i];}
	if(f)cout << "\n";
}
template<typename T, int N1, int N2>
void PRINTF(const T (&a)[N1][N2], int h = N1, int w = N2){
	rep(i,h){rep(j,w){cout << a[i][j] << " \n"[j==w-1];}}
}
string substr(const string &str, int S1, int S2 = -1){
  if(S2 == -1)return str.substr(S1);
  return str.substr(S1, S2-S1);
}
// typedef
typedef complex<double> Point;
typedef pair<int, int> P;
typedef pair<int, P> PP;
typedef pair<P, int> Pi;
typedef vector<int> vi;
typedef deque<int> dq;
const int inf = 1e9+7;
const int INF = 1e18+7;
// int sum = accumulate(a, a+n, 0LL);
// int mx = max_element(a, a+n);
// int mn = min_element(a, a+n);
// int cnt = count(a, a+n, k);

int n, a[100], b[100];
int calc(vi vec, int total, int num, int idx, int cnt){
  int m = vec.size(), ans = INF;
  if(m == idx and cnt == 0)return INF;
  if(m == idx)return llabs(total - num) + 10*(cnt-1);
  ans = min(ans, calc(vec, total+vec[idx], num, idx+1, cnt+1));
  ans = min(ans, calc(vec, total, num, idx+1, cnt));
  return ans;
}

int solve(vi vec, int num){
  int m = vec.size();
  if(m == 0)return INF;
  if(num <= vec[0])return llabs(vec[0] - num);
  // int sum = accumulate(all(vec), 0LL);
  // cout << sum << endl;
  // int ans = calc(vec, 0, num, 0);
  // cout << vec << " " << num << " " << ans << endl;
  return calc(vec, 0, num, 0, 0);
}

int comb(vi x, vi y, vi z, int idx){
  vi xx{80}, yy{21, 30, 40}, zz{98};
  if(idx == n){
    int ans = INF;
    rep(i,3)rep(j,3)rep(k,3){
      if(i == j or j == k or i == k)continue;
      ans = min(ans, solve(x, b[i]) + solve(y, b[j]) + solve(z, b[k]));
      if(x == xx and y == yy and z == zz){
        // cout << x << " : " << y << " : " << z << endl;
        // cout << b[i] << " : " << b[j] << " : " << b[k] << endl;
        // cout << solve(x, b[i]) << " : " << solve(y, b[j]) << " : " << solve(z, b[k]) << endl;
        // cout << ans << endl;
      }
    }
    return ans;
  }
  int ans = INF;
  x.pb(a[idx]);ans = min(ans, comb(x, y, z, idx+1));x.pop_back();
  y.pb(a[idx]);ans = min(ans, comb(x, y, z, idx+1));y.pop_back();
  z.pb(a[idx]);ans = min(ans, comb(x, y, z, idx+1));z.pop_back();
  return ans;
}
signed main(){
  cin >> n;
  rep(i,3)cin >> b[i];
  rep(i,n)cin >> a[i];
  sort(a, a+n);
  sort(b, b+3);
  vi x;vi y;vi z;
  int ans = comb(x, y, z, 0);
  cout << ans << endl;
  return 0;
}






Measured memory_bytes: 256