import random
import math
N,X=map(int,raw_input().split())
b=map(int,raw_input().split())
lb=max(b)
b=[X+1-x for x in b if x<=X]
N=len(b)

if N<=4:
  if N and N<=2:
    best=X+1-min(b)
  else:  
    best=X+1
else:  
  b.sort()
  b=b[:-4]
  tot=sum(b)
  RW=63
  random.shuffle(b)
  #MAX_SPREAD=(int(1.0*math.sqrt(N)+2)*X)/RW+3
  MAX_SPREAD=(int(0.1*math.sqrt(N)+2)*X)/RW+3
  
  OFFSET=X/RW+1
  N-=4
  dp=[0]*(MAX_SPREAD+OFFSET)
  dp[OFFSET]=1
  
  mir=[0]*(1<<16)
  for i in range(1<<16):
    j=((i&0xff00)>>8)|((i&0xff)<<8)
    j=((j&0xf0f0)>>4)|((j&0xf0f)<<4)
    j=((j&0xcccc)>>2)|((j&0x3333)<<2)
    j=((j&0xaaaa)>>1)|((j&0x5555)<<1)
    mir[i]=j
  par=0

  for i in range(N):
    shift=b[i]
    #Mirror bitmask  
    for j in range((shift>>1)/RW+2):
      d=dp[OFFSET+j]
      m=0
      for k in range(3):
        m=(m<<16)+mir[d&0xffff]
        d>>=16
      m=(m<<(16-(64-RW)))+(mir[d]>>(64-RW))  
      if par:
        dp[OFFSET-1-j]=m
      else:  
        m&=(1<<(RW-1))-1
        m<<=1
        m|=(dp[OFFSET+j+1]&1)
        dp[OFFSET-1-j]=m
    #Compute shifts and masks   
    if shift&1:
      shift>>=1
      left=(-shift-par)/RW
      ls1=(-shift-par)%RW
      right=(shift+1-par)/RW
      rs1=(shift+1-par)%RW
      par^=1
    else:
      shift>>=1
      left=(-shift)/RW
      ls1=(-shift)%RW
      right=shift/RW
      rs1=shift%RW
      
    ls2=(RW-ls1)%RW
    lmsk2=(1<<ls1)-1
    lmsk1=~lmsk2
    rs2=(RW-rs1)%RW
    rmsk2=(1<<rs1)-1
    rmsk1=~rmsk2
    
    #Bit mask merge
    ndp=[0]*(OFFSET+MAX_SPREAD)      
    for j in range(OFFSET,MAX_SPREAD+OFFSET-right-1):
      r1=dp[j+right]
      r2=dp[j+right+1]
      r12=((r1&rmsk1)>>rs1)|((r2&rmsk2)<<rs2)
      l1=dp[j+left]
      l2=dp[j+left+1]
      l12=((l1&lmsk1)>>ls1)|((l2&lmsk2)<<ls2)
      ndp[j]=(r12|l12)
    dp=ndp
  #Find best
  for j in range(OFFSET,MAX_SPREAD+OFFSET):
    if dp[j]:
      for k in range(RW):
        if (dp[j]>>k)&1:
          nvl=(j-OFFSET)*(2*RW)+2*k+par
          l1=(tot+nvl)/2
          l1=max(tot-l1,l1)
          best=l1+X+1
          break
      break    
print max(lb,best)
