fun main(args: Array<String>) {
    val N = readLine()!!.toInt()
    val A = readLine()!!.split(" ").map { it.toLong() }
    val S = mutableListOf<Long>(A[0])
    A.forEachIndexed { index, l ->
        if (index > 0) S.add(S[index - 1] + l)
    }

    var d_min = Long.MAX_VALUE
    var p = 0; var r = 2
    for (q in 1 until N - 2) {

        var d_l = Long.MAX_VALUE
        left@ for (i in p until q) {
            val d = Math.abs((S[q] - S[i]) - S[i])
            if (d_l > d) {
                d_l = d
                p = i
            } else break@left
        }

        var d_r = Long.MAX_VALUE
        right@ for (i in r until N) {
            val d = Math.abs((S.last() - S[i]) - (S[i] - S[q]))
            if (d_r > d) {
                d_r = d
                r = i
            } else break@right
        }

        val d_p0 = S[p]; val d_qp = S[q] - S[p]; val d_rq = S[r] - S[q]; val d_Nr = S.last() - S[r]
        val max = Math.max(Math.max(d_p0, d_qp), Math.max(d_rq, d_Nr))
        val min = Math.min(Math.min(d_p0, d_qp), Math.min(d_rq, d_Nr))
        d_min = Math.min(d_min, max - min)
    }

    println(d_min)
}