fun main(args: Array<String>) {
    val S = readLine()!!.toString();
    val array = S.split(" ")
    var a = array[0].toLong()
    var b = array[1].toLong()
    var c = array[2].toLong()
    var d = array[3].toLong()

////    a = BigDecimal.TEN.pow(9).toLong()
////    b = BigDecimal.TEN.pow(9).toLong()
////    c = BigDecimal.TEN.pow(9).toLong()
////    d = BigDecimal.TEN.pow(9).toLong()
//
//    // 正負の場合分け
//    val ab = a * b
//    val cd = c * d
//
//    var aMinus = false
//    if (ab < 0) {
//        // a < 0, 0 < b
//        aMinus = true
//    } else {
//        // a , b < 0, 0 < a,b
//    }
//    if (b == 0L && a < 0) {
//        aMinus = true
//    }
//
//    var cMinus = false
//    if (cd < 0) {
//        cMinus = true
//    }
//    if (d == 0L && c < 0) {
//        cMinus = true
//    }
//
//    // a, c ともにマイナスのとき、
//    if (aMinus && cMinus) {
//        // ABS (a+c) と ABS (b+d)を比較して、大きな方のペアを採用する。
//        val absAplusC = abs(a) + abs(c)
//        val absBplusD = abs(b) + abs(d)
//
//        if (b == 0L) {
//            println(a * c)
//            return
//        }
//        if (d == 0L) {
//            println(a * c)
//            return
//        }
//
//        if (absAplusC < absBplusD) {
//            println(b * d)
//        } else {
//            println(a * c)
//        }
//        return
//    }

    // (a,b)および(b,d)がともに、正のセットか、負のセットであるとき
    // 単純に、a*c vs a*d vs b*c vs b*d
    val ac = a * c
    val ad = a * d
    val bc = b * c
    val bd = b * d

    val ints = mutableListOf<Long>(ac, ad, bc, bd)
    ints.sort()

    println(ints.last())
}