local mfl, mma, mmi = math.floor, math.max, math.min
local function lower_bound(ary, x, min, max)
  if(x <= ary[min]) then return min end
  if(ary[max] < x) then return max + 1 end
  while(1 < max - min) do
    local mid = mfl((min + max) / 2)
    if(ary[mid] < x) then
      min = mid
    else
      max = mid
    end
  end
  return max
end

local ret = nil
local n = io.read("*n")
local tot = {}
local cur = 0
for i = 1, n do
  cur = cur + io.read("*n")
  tot[i] = cur
end
for i = 3, n - 1 do
  local leftsum = tot[i - 1]
  local rightsum = tot[n] - leftsum
  local leftlb = lower_bound(tot, leftsum / 2, 1, i - 1)
  leftlb = mmi(leftlb, i - 2)
  local rightlb = lower_bound(tot, leftsum + rightsum / 2, i, n)
  rightlb = mmi(rightlb, n - 1)
  for k = 1, 4 do
    local v1 = tot[leftlb]
    local v3 = tot[rightlb] - leftsum
    if k <= 2 then
      if(1 < leftlb) then
        v1 = tot[leftlb - 1]
      end
    end
    if k % 2 == 0 then
      if(i < rightlb) then
        v3 = tot[rightlb - 1] - leftsum
      end
    end
    local v2 = leftsum - v1
    local v4 = rightsum - v3
    local mi = mmi(v1, mmi(v2, mmi(v3, v4)))
    local ma = mma(v1, mma(v2, mma(v3, v4)))
    if(ret == nil) then
      ret = ma - mi
    else
      ret = mmi(ret, ma - mi)
    end
  end
end
print(ret)
