function Main(input){
  input = input.split("\n");
  inputStr = input[0].split(" ");
  const N = Number.parseInt(inputStr[0]);
  const A = Number.parseInt(inputStr[1]);
  const B = Number.parseInt(inputStr[2]);
  const C = Number.parseInt(inputStr[3]);
  var tg = [A,B,C];
  var bb = [];
  //N本の竹の長さを配列bbに格納する
  for( var i=0 ; i<N ; i++ ){
    bb.push(Number.parseInt(input[i+1].split(" ")));
  }
  bb.push(Number.MAX_VALUE);
  //竹を成長させる探索処理
  var MP = 0;

  //console.log("最初",bb);
  
  //長さが一致する竹を対象一覧(配列tg、bb)から排除する
  for(var i=0 ; i<tg.length ; i++){
    var tmp = bb.indexOf(tg[i]);
    if(tmp>0){ 
      tg.splice(i,1);
      bb.splice(tmp,1);
    }
  }

  //console.log("排除",bb);
  
  //育った要素から順にtgから削除していく。
  while( tg.length > 0){
    //最も近似する場所を求める
    var t1 = Math.abs(tg[0]-bb[0]);
    var pmemo = [0,0];
    for( var j=1 ; j<bb.length ; j++){
      var t2 = Math.abs(tg[0]-bb[j]);
      if(t1>t2){
        t1 = t2;
        pmemo[0] = j;
      }
    }
    
    //2本の竹を足して再度考えてみる
    if(t1>10){
      var c_flg = false;
      for(var k=0 ; k<bb.length-1 ; k++){
        for(var r=k+1 ; r<bb.length ; r++){
          t2 = Math.abs(tg[0]-(bb[k]+bb[r]));
          if( t1 > t2 ){
            t1 = t2;
            pmemo[0] = k;
            pmemo[1] = r;
            c_flg = true;
          }
        }
      }
    }
    
    //絶対値との差異(t1)をMPとして足しこみ、bbから要素を削除する
    if(c_flg === true){
      //console.log("2本を1本に");
      MP += 10;
      //最後の1つ手前に追加
      bb.splice(bb.length-1,0,bb[pmemo[0]]+bb[pmemo[1]]);
      //追加した元ねたの削除
      bb.splice(pmemo[1],1);
      bb.splice(pmemo[0],1);
    } else {
      MP += t1;
      tg.splice(0,1);
      //console.log("bbから消す値=",bb[pmemo[0]]);

      //console.log("bbの何処の値を消す",pmemo[0]);

      bb.splice(pmemo[0],1);
      i++;
    }
    //console.log("処理後tg",tg);
    //console.log("処理後bb",bb);
    c_flg = false;
    pmemo[0]=0;
    pmemo[1]=0;
  }
  console.log(MP);
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));