program ccc
implicit none

integer :: n, a, b, c, i, j, k, res1, res2
integer :: a1,a2,b1,b2,c1,c2,d1,d2
integer,allocatable,dimension(:) :: l

read*, n,a,b,c
allocate(l(n))
read*, l

res2=1000000

do i=0,2**n-1
 
 do j=0,2**n-1
 a1=0
 b1=0
 c1=0
 d1=0
 a2=0
 b2=0
 c2=0
 d2=0
 res1=0
  
  do k=0,n-1
  if(btest(i,k)) then
   if(btest(j,k)) then
   a1=a1+l(k+1)
   a2=a2+1
   else
   b1=b1+l(k+1)
   b2=b2+1
   end if
  else
   if(btest(j,k)) then
   c1=c1+l(k+1)
   c2=c2+1
   else
   d1=d1+l(k+1)
   d2=d2+1
   end if
  end if
  end do
  
 if(a2==0) cycle
 if(b2==0) cycle
 if(c2==0) cycle
 res1=res1+(a2+b2+c2-3)*10
 res1=res1+abs(a-a1)+abs(b-b1)+abs(c-c1)
 res2=min(res1,res2)

 end do
end do

write(*,'(i0)') res2

end program
; ModuleID = 'FIRModule'
source_filename = "FIRModule"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

@_QFEl.0 = internal unnamed_addr global ptr null
@_QFEl.8 = internal unnamed_addr global i64 0
@_QQcl.4bba6581d84f86e26268b88eb44f72fe = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_4879/source.f\00"
@_QQcl.28693029 = linkonce constant [4 x i8] c"(i0)"
@_QQEnvironmentDefaults = local_unnamed_addr constant ptr null

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #0

define void @_QQmain() local_unnamed_addr {
  %1 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.4bba6581d84f86e26268b88eb44f72fe, i32 8)
  %7 = call i1 @_FortranAioInputInteger(ptr %6, ptr nonnull %5, i32 4)
  %8 = call i1 @_FortranAioInputInteger(ptr %6, ptr nonnull %2, i32 4)
  %9 = call i1 @_FortranAioInputInteger(ptr %6, ptr nonnull %3, i32 4)
  %10 = call i1 @_FortranAioInputInteger(ptr %6, ptr nonnull %4, i32 4)
  %11 = call i32 @_FortranAioEndIoStatement(ptr %6)
  %12 = load i32, ptr %5, align 4, !tbaa !3
  %13 = call i32 @llvm.smax.i32(i32 %12, i32 0)
  %14 = zext i32 %13 to i64
  %15 = shl nuw nsw i64 %14, 2
  %16 = call ptr @malloc(i64 %15)
  store ptr %16, ptr @_QFEl.0, align 8, !tbaa !7
  store i64 %14, ptr @_QFEl.8, align 8, !tbaa !7
  %17 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.4bba6581d84f86e26268b88eb44f72fe, i32 10)
  %.unpack = load ptr, ptr @_QFEl.0, align 8, !tbaa !7
  %.unpack229.unpack.unpack231 = load i64, ptr @_QFEl.8, align 8, !tbaa !7
  store ptr %.unpack, ptr %1, align 8, !tbaa !7
  %.fca.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 1
  store i64 4, ptr %.fca.1.gep, align 8, !tbaa !7
  %.fca.2.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep, align 8, !tbaa !7
  %.fca.3.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep, align 4, !tbaa !7
  %.fca.4.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 4
  store i8 9, ptr %.fca.4.gep, align 1, !tbaa !7
  %.fca.5.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep, align 2, !tbaa !7
  %.fca.6.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep, align 1, !tbaa !7
  %.fca.7.0.0.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep, align 8, !tbaa !7
  %.fca.7.0.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 7, i64 0, i64 1
  store i64 %.unpack229.unpack.unpack231, ptr %.fca.7.0.1.gep, align 8, !tbaa !7
  %.fca.7.0.2.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.fca.7.0.2.gep, align 8, !tbaa !7
  %18 = call i1 @_FortranAioInputDescriptor(ptr %17, ptr nonnull %1)
  %19 = call i32 @_FortranAioEndIoStatement(ptr %17)
  %20 = load i32, ptr %5, align 4, !tbaa !3
  %.fr = freeze i32 %20
  %21 = icmp eq i32 %.fr, 0
  br i1 %21, label %.lr.ph310, label %22

22:                                               ; preds = %0
  %23 = icmp slt i32 %.fr, 1
  br i1 %23, label %._crit_edge311, label %.preheader.i

.preheader.i:                                     ; preds = %22
  %24 = and i32 %.fr, 1
  %.not3.i = icmp eq i32 %24, 0
  %25 = select i1 %.not3.i, i32 1, i32 2
  %26 = icmp eq i32 %.fr, 1
  br i1 %26, label %__mlir_math_ipowi_i32.exit, label %.lr.ph.i

.lr.ph.i:                                         ; preds = %.preheader.i, %.lr.ph.i
  %spec.select4.i = phi i32 [ %spec.select.i, %.lr.ph.i ], [ %25, %.preheader.i ]
  %27 = phi i32 [ %29, %.lr.ph.i ], [ %.fr, %.preheader.i ]
  %28 = phi i32 [ %30, %.lr.ph.i ], [ 2, %.preheader.i ]
  %29 = lshr i32 %27, 1
  %30 = mul i32 %28, %28
  %31 = and i32 %27, 2
  %.not.i = icmp eq i32 %31, 0
  %32 = select i1 %.not.i, i32 1, i32 %30
  %spec.select.i = mul i32 %32, %spec.select4.i
  %33 = icmp ult i32 %27, 4
  br i1 %33, label %__mlir_math_ipowi_i32.exit, label %.lr.ph.i

__mlir_math_ipowi_i32.exit:                       ; preds = %.lr.ph.i, %.preheader.i
  %common.ret.op.i = phi i32 [ %25, %.preheader.i ], [ %spec.select.i, %.lr.ph.i ]
  %34 = add i32 %common.ret.op.i, -1
  %35 = icmp sgt i32 %34, -1
  br i1 %35, label %.lr.ph310, label %._crit_edge311

.lr.ph310:                                        ; preds = %0, %__mlir_math_ipowi_i32.exit
  %36 = phi i32 [ %34, %__mlir_math_ipowi_i32.exit ], [ 0, %0 ]
  %37 = zext i32 %36 to i64
  %38 = add nuw nsw i64 %37, 1
  %39 = icmp slt i32 %.fr, 1
  %40 = and i32 %.fr, 1
  %.not3.i285 = icmp eq i32 %40, 0
  %41 = select i1 %.not3.i285, i32 1, i32 2
  %42 = add i32 %.fr, -1
  %43 = sext i32 %42 to i64
  %44 = add nsw i64 %43, 1
  %45 = icmp sgt i32 %42, -1
  %.unpack272 = load ptr, ptr @_QFEl.0, align 8
  %46 = load i32, ptr %2, align 4
  %47 = load i32, ptr %3, align 4
  %48 = load i32, ptr %4, align 4
  %.mux = zext i1 %21 to i32
  %.mux.mux = select i1 %39, i32 %.mux, i32 %41
  %or.cond314 = icmp slt i32 %.fr, 2
  br label %49

49:                                               ; preds = %.lr.ph310, %._crit_edge307
  %50 = phi i64 [ %38, %.lr.ph310 ], [ %115, %._crit_edge307 ]
  %51 = phi i32 [ 0, %.lr.ph310 ], [ %114, %._crit_edge307 ]
  %.0309 = phi i32 [ 1000000, %.lr.ph310 ], [ %.1.lcssa, %._crit_edge307 ]
  br i1 %or.cond314, label %__mlir_math_ipowi_i32.exit291, label %.lr.ph.i290

.lr.ph.i290:                                      ; preds = %49, %.lr.ph.i290
  %spec.select4.i287 = phi i32 [ %spec.select.i289, %.lr.ph.i290 ], [ %41, %49 ]
  %52 = phi i32 [ %54, %.lr.ph.i290 ], [ %.fr, %49 ]
  %53 = phi i32 [ %55, %.lr.ph.i290 ], [ 2, %49 ]
  %54 = lshr i32 %52, 1
  %55 = mul i32 %53, %53
  %56 = and i32 %52, 2
  %.not.i288 = icmp eq i32 %56, 0
  %57 = select i1 %.not.i288, i32 1, i32 %55
  %spec.select.i289 = mul i32 %57, %spec.select4.i287
  %58 = icmp ult i32 %52, 4
  br i1 %58, label %__mlir_math_ipowi_i32.exit291, label %.lr.ph.i290

__mlir_math_ipowi_i32.exit291:                    ; preds = %.lr.ph.i290, %49
  %common.ret.op.i284 = phi i32 [ %.mux.mux, %49 ], [ %spec.select.i289, %.lr.ph.i290 ]
  %59 = add i32 %common.ret.op.i284, -1
  %60 = icmp sgt i32 %59, -1
  br i1 %60, label %.lr.ph306.preheader, label %._crit_edge307

.lr.ph306.preheader:                              ; preds = %__mlir_math_ipowi_i32.exit291
  %61 = zext i32 %59 to i64
  %62 = add nuw nsw i64 %61, 1
  br label %.lr.ph306

.lr.ph306:                                        ; preds = %.lr.ph306.preheader, %._crit_edge.thread
  %63 = phi i64 [ %112, %._crit_edge.thread ], [ %62, %.lr.ph306.preheader ]
  %64 = phi i32 [ %111, %._crit_edge.thread ], [ 0, %.lr.ph306.preheader ]
  %.1305 = phi i32 [ %.2, %._crit_edge.thread ], [ %.0309, %.lr.ph306.preheader ]
  br i1 %45, label %.lr.ph, label %._crit_edge.thread

.lr.ph:                                           ; preds = %.lr.ph306, %90
  %indvars.iv = phi i64 [ %70, %90 ], [ 0, %.lr.ph306 ]
  %65 = phi i64 [ %91, %90 ], [ %44, %.lr.ph306 ]
  %.0199297 = phi i32 [ %.1200, %90 ], [ 0, %.lr.ph306 ]
  %.0201296 = phi i32 [ %.1202, %90 ], [ 0, %.lr.ph306 ]
  %.0203295 = phi i32 [ %.1204, %90 ], [ 0, %.lr.ph306 ]
  %.0205294 = phi i32 [ %.1206, %90 ], [ 0, %.lr.ph306 ]
  %.0207293 = phi i32 [ %.1208, %90 ], [ 0, %.lr.ph306 ]
  %.0209292 = phi i32 [ %.1210, %90 ], [ 0, %.lr.ph306 ]
  %66 = trunc i64 %indvars.iv to i32
  %67 = shl nuw i32 1, %66
  %68 = and i32 %67, %51
  %.not = icmp eq i32 %68, 0
  %69 = and i32 %67, %64
  %.not234 = icmp eq i32 %69, 0
  %70 = add nuw nsw i64 %indvars.iv, 1
  br i1 %.not, label %82, label %71

71:                                               ; preds = %.lr.ph
  %sext316 = shl i64 %70, 32
  %72 = ashr exact i64 %sext316, 32
  %73 = add nsw i64 %72, -1
  %74 = getelementptr i32, ptr %.unpack272, i64 %73
  %75 = load i32, ptr %74, align 4, !tbaa !3
  br i1 %.not234, label %79, label %76

76:                                               ; preds = %71
  %77 = add i32 %75, %.0209292
  %78 = add i32 %.0207293, 1
  br label %90

79:                                               ; preds = %71
  %80 = add i32 %75, %.0205294
  %81 = add i32 %.0203295, 1
  br label %90

82:                                               ; preds = %.lr.ph
  br i1 %.not234, label %90, label %83

83:                                               ; preds = %82
  %sext317 = shl i64 %70, 32
  %84 = ashr exact i64 %sext317, 32
  %85 = add nsw i64 %84, -1
  %86 = getelementptr i32, ptr %.unpack272, i64 %85
  %87 = load i32, ptr %86, align 4, !tbaa !3
  %88 = add i32 %87, %.0201296
  %89 = add i32 %.0199297, 1
  br label %90

90:                                               ; preds = %82, %76, %79, %83
  %.1210 = phi i32 [ %77, %76 ], [ %.0209292, %79 ], [ %.0209292, %83 ], [ %.0209292, %82 ]
  %.1208 = phi i32 [ %78, %76 ], [ %.0207293, %79 ], [ %.0207293, %83 ], [ %.0207293, %82 ]
  %.1206 = phi i32 [ %.0205294, %76 ], [ %80, %79 ], [ %.0205294, %83 ], [ %.0205294, %82 ]
  %.1204 = phi i32 [ %.0203295, %76 ], [ %81, %79 ], [ %.0203295, %83 ], [ %.0203295, %82 ]
  %.1202 = phi i32 [ %.0201296, %76 ], [ %.0201296, %79 ], [ %88, %83 ], [ %.0201296, %82 ]
  %.1200 = phi i32 [ %.0199297, %76 ], [ %.0199297, %79 ], [ %89, %83 ], [ %.0199297, %82 ]
  %91 = add nsw i64 %65, -1
  %92 = icmp sgt i64 %65, 1
  br i1 %92, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %90
  %93 = icmp ne i32 %.1208, 0
  %94 = icmp ne i32 %.1204, 0
  %or.cond = select i1 %93, i1 %94, i1 false
  %95 = icmp ne i32 %.1200, 0
  %or.cond3 = select i1 %or.cond, i1 %95, i1 false
  br i1 %or.cond3, label %96, label %._crit_edge.thread

96:                                               ; preds = %._crit_edge
  %97 = add i32 %.1204, %.1208
  %98 = add i32 %97, %.1200
  %99 = mul i32 %98, 10
  %100 = add i32 %99, -30
  %101 = sub i32 %46, %.1210
  %102 = call i32 @llvm.abs.i32(i32 %101, i1 false)
  %103 = add i32 %100, %102
  %104 = sub i32 %47, %.1206
  %105 = call i32 @llvm.abs.i32(i32 %104, i1 false)
  %106 = add i32 %103, %105
  %107 = sub i32 %48, %.1202
  %108 = call i32 @llvm.abs.i32(i32 %107, i1 false)
  %109 = add i32 %106, %108
  %110 = call i32 @llvm.smin.i32(i32 %109, i32 %.1305)
  br label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %.lr.ph306, %96, %._crit_edge
  %.2 = phi i32 [ %110, %96 ], [ %.1305, %._crit_edge ], [ %.1305, %.lr.ph306 ]
  %111 = add nuw i32 %64, 1
  %112 = add nsw i64 %63, -1
  %113 = icmp sgt i64 %63, 1
  br i1 %113, label %.lr.ph306, label %._crit_edge307

._crit_edge307:                                   ; preds = %._crit_edge.thread, %__mlir_math_ipowi_i32.exit291
  %.1.lcssa = phi i32 [ %.0309, %__mlir_math_ipowi_i32.exit291 ], [ %.2, %._crit_edge.thread ]
  %114 = add nuw i32 %51, 1
  %115 = add nsw i64 %50, -1
  %116 = icmp sgt i64 %50, 1
  br i1 %116, label %49, label %._crit_edge311

._crit_edge311:                                   ; preds = %._crit_edge307, %22, %__mlir_math_ipowi_i32.exit
  %.0.lcssa = phi i32 [ 1000000, %__mlir_math_ipowi_i32.exit ], [ 1000000, %22 ], [ %.1.lcssa, %._crit_edge307 ]
  %117 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28693029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.4bba6581d84f86e26268b88eb44f72fe, i32 57)
  %118 = call i1 @_FortranAioOutputInteger32(ptr %117, i32 %.0.lcssa)
  %119 = call i32 @_FortranAioEndIoStatement(ptr %117)
  ret void
}

declare ptr @_FortranAioBeginExternalListInput(i32, ptr, i32) local_unnamed_addr

declare i1 @_FortranAioInputInteger(ptr, ptr, i32) local_unnamed_addr

declare i32 @_FortranAioEndIoStatement(ptr) local_unnamed_addr

declare i1 @_FortranAioInputDescriptor(ptr, ptr) local_unnamed_addr

declare ptr @_FortranAioBeginExternalFormattedOutput(ptr, i64, ptr, i32, ptr, i32) local_unnamed_addr

declare i1 @_FortranAioOutputInteger32(ptr, i32) local_unnamed_addr

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #1

attributes #0 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!llvm.module.flags = !{!0, !1, !2}

!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{!4, !4, i64 0}
!4 = !{!"any data access", !5, i64 0}
!5 = !{!"any access", !6, i64 0}
!6 = !{!"Flang Type TBAA Root"}
!7 = !{!8, !8, i64 0}
!8 = !{!"descriptor member", !5, i64 0}
