local mce, msq = math.ceil, math.sqrt
local function getprimes(x)
  local primes = {}
  local allnums = {}
  for i = 1, x do allnums[i] = true end
  for i = 2, x do
    if allnums[i] then
      table.insert(primes, i)
      local lim = x // i
      for j = 2, lim do
        allnums[j * i] = false
      end
    end
  end
  return primes
end


local function getdivisorparts(x, primes)
  local prime_num = #primes
  local tmp = {}
  local lim = mce(msq(x))
  local primepos = 1
  local dv = primes[primepos]
  while primepos <= prime_num and dv <= lim do
    if x % dv == 0 then
      local t = {}
      t.p = dv
      t.cnt = 1
      x = x // dv
      while x % dv == 0 do
        x = x // dv
        t.cnt = t.cnt + 1
      end
      table.insert(tmp, t)
      lim = mce(msq(x))
    end
    if primepos == prime_num then break end
    primepos = primepos + 1
    dv = primes[primepos]
  end
  if x ~= 1 then
    local t = {}
    t.p, t.cnt = x, 1
    table.insert(tmp, t)
  end
  return tmp
end

local function getdivisorCore(divisorparts)
  local t = {}
  local pat = 1
  local len = #divisorparts
  local allpat = 1
  for i = 1, len do
    allpat = allpat * (1 + divisorparts[i].cnt)
  end
  for t_i_pat = 0, allpat - 1 do
    local div = allpat
    local i_pat = t_i_pat
    local ret = 1
    for i = 1, len do
      div = div // (divisorparts[i].cnt + 1)
      local mul = i_pat // div
      i_pat = i_pat % div
      for j = 1, mul do
        ret = ret * divisorparts[i].p
      end
    end
    table.insert(t, ret)
  end
  table.sort(t)
  return t
end

local primes = getprimes(mce(msq(1000000007)))

local n, k = io.read("*n", "*n")
local a = {}
local sum = 0
for i = 1, n do
  a[i] = io.read("*n")
  sum = sum + a[i]
end

local dvp = getdivisorparts(sum, primes)
local dvs = getdivisorCore(dvp)

for id = #dvs, 1, -1 do
  local dv = dvs[id]
  local plus, minus = {}, {}
  local z = 0
  local c = 0
  for i = 1, n do
    local v = a[i] % dv
    if v <= dv - v then
      table.insert(minus, v)
      z = z - v
    else
      table.insert(plus, dv - v)
      z = z + dv - v
      c = c + dv - v
    end
  end
  if 0 < z then
    table.sort(plus)
    for i = #plus, 1, -1 do
      local v = plus[i]
      z = z - dv
      c = c - v
      if z == 0 then break end
    end
  elseif z < 0 then
    table.sort(minus)
    for i = #minus, 1, -1 do
      local v = minus[i]
      z = z + dv
      c = c + (dv - v)
      if z == 0 then break end
    end
  end
  if c <= k then print(dv) break end
end
