import java.util.*

fun main(args: Array<String>) {
    val (N, K) = readLine()!!.split(" ").map {it.toInt()}
    val A = readLine()!!.split(" ").map {it.toLong()}

    fun divisor(n : Long) : Array<Long> {
        val l = ArrayList<Long>()
        var i = 1L
        while (i * i <= n) {
            if (n % i == 0L) {
                l.add(i)
                if (i * i != n) {
                    l.add(n / i)
                }
            }
            i++
        }
        l.sort()

        return l.toTypedArray()
    }

    val cs = divisor(A.sum())
    var res = 1L

    for (c in cs) {
        val a = A.map { it % c }.sorted().toTypedArray()
        val b = Array(N) { c - a[it] }
        for (i in 1 until a.size) {
            a[i] += a[i - 1]
        }
        for (i in b.size - 2 downTo 0) {
            b[i] += b[i + 1]
        }
        var tmp = -1L
        for (i in 0 until a.size - 1) {
            if (a[i] == b[i + 1]) {
                tmp = a[i]
            }
        }

        if (tmp <= K) {
            res = Math.max(res, c)
        }
    }

    println(res)
}
