Problem:
Score : 500 points

Problem Statement

We have a sequence of N integers: A_1, A_2, \cdots, A_N.

You can perform the following operation between 0 and K times (inclusive):

Choose two integers i and j such that i \neq j, each between 1 and N (inclusive). Add 1 to A_i and -1 to A_j, possibly producing a negative element.

Compute the maximum possible positive integer that divides every element of A after the operations. Here a positive integer x divides an integer y if and only if there exists an integer z such that y = xz.

Constraints

2 \leq N \leq 500

1 \leq A_i \leq 10^6

0 \leq K \leq 10^9

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N K
A_1 A_2 \cdots A_{N-1} A_{N}

Output

Print the maximum possible positive integer that divides every element of A after the operations.

Sample Input 1

2 3
8 20

Sample Output 1

7

7 will divide every element of A if, for example, we perform the following operation:

Choose i = 2, j = 1. A becomes (7, 21).

We cannot reach the situation where 8 or greater integer divides every element of A.

Sample Input 2

2 10
3 5

Sample Output 2

8

Consider performing the following five operations:

Choose i = 2, j = 1. A becomes (2, 6).

Choose i = 2, j = 1. A becomes (1, 7).

Choose i = 2, j = 1. A becomes (0, 8).

Choose i = 2, j = 1. A becomes (-1, 9).

Choose i = 1, j = 2. A becomes (0, 8).

Then, 0 = 8 \times 0 and 8 = 8 \times 1, so 8 divides every element of A. We cannot reach the situation where 9 or greater integer divides every element of A.

Sample Input 3

4 5
10 1 2 22

Sample Output 3

7

Sample Input 4

8 7
1 7 5 6 8 2 6 5

Sample Output 4

5

Solution in Ruby (2.3.3) (judge verdict: Accepted)

str = gets.split
N,K = str[0].to_i, str[1].to_i
a = Array.new(N)
sum = 0
str = gets.split
for i in 0...N do
    a[i] = str[i].to_i
    sum += a[i]
end
b = Array.new(0)

x = 1
l = 0
r = 0
ll = Array.new(0)
rr = Array.new(0)
c = 0
y = 0
z = 0
while sum/x >= x
    if sum % x == 0
        y = sum/x
        if x != y
            b.push(x) 
        end
        l = 0
        r = 0
        ll.clear
        rr.clear
        for i in 0...N do
            z = a[i] % y
            if z*2 == y
                c += 1
            elsif z*2 < y
                l += z
                ll.push(y-z)
            else
                r += (y-z)
                rr.push(z)
            end
        end
        while c > 0
            if l < r
                l += y/2
            else
                r += y/2
            end
            c -= 1
        end
        z = (l-r).abs/y
        if l>r
            ll.sort!
            ll.reverse!
            while z > 0
                r += ll.pop
                z -= 1
            end
        else
            rr.sort!
            rr.reverse!
            while z > 0
                l += rr.pop
                z -= 1
            end
        end
        if l<=K || r<=K
            puts y
            exit
        end
    end
    x += 1
end

while !b.empty?
    y = b.pop
    l = 0
    r = 0
    ll.clear
    rr.clear
    for i in 0...N do
    z = a[i] % y
        if z*2 == y
            c += 1
        elsif z*2 < y
            l += z
            ll.push(y-z)
        else
            r += (y-z)
            rr.push(z)
        end
    end
    while c > 0
        if l < r
            l += y/2
        else
            r += y/2
        end
        c -= 1
    end
    z = (l-r).abs/y
    if l>r
        ll.sort!
        ll.reverse!
        while z > 0
            r += ll.pop
            z -= 1
        end
    else
        rr.sort!
        rr.reverse!
        while z > 0
            l += rr.pop
            z -= 1
        end
    end
    if l<=K || r<=K
        puts y
        exit
    end
end