//package atcoder.beginner_178;

import java.io.*;
import java.util.StringTokenizer;

public class Main {

    public static void main (String[] args) throws Exception {

        String s = "-1000000000 0 -1000000000 0";

//        br = new BufferedReader(new StringReader(s));
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));

        rl(); long a = nlo(), b=nlo(), c=nlo(), d=nlo();
        if (a<=0 && b<=0 && c>=0 && d>=0) {
            bw.write( (b*c) + "\n");
        } else if (a>=0 && b>=0 && c<=0 && d<=0) {
            bw.write( (a*d) + "\n");
        } else {
            bw.write( Math.max(a*c, b*d) + "\n");
        }
        bw.flush();
    }

    static BufferedReader br; static BufferedWriter bw; static StringTokenizer st;
    static void rl() throws Exception{ st = new StringTokenizer(br.readLine()); }
    static long nlo(){ return Long.parseLong(st.nextToken()); }
    static int nin(){ return Integer.parseInt(st.nextToken()); }
    /*private static void te(){}*/
    static double ndo(){ return Double.parseDouble(st.nextToken()); }
    static char[] nca(){ return st.nextToken().toCharArray(); }
} import java.io.*; io.* java import java.util.StringTokenizer; StringTokenizer java.util public class Main {

    public static void main (String[] args) throws Exception {

        String s = "-1000000000 0 -1000000000 0";

//        br = new BufferedReader(new StringReader(s));
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));

        rl(); long a = nlo(), b=nlo(), c=nlo(), d=nlo();
        if (a<=0 && b<=0 && c>=0 && d>=0) {
            bw.write( (b*c) + "\n");
        } else if (a>=0 && b>=0 && c<=0 && d<=0) {
            bw.write( (a*d) + "\n");
        } else {
            bw.write( Math.max(a*c, b*d) + "\n");
        }
        bw.flush();
    }

    static BufferedReader br; static BufferedWriter bw; static StringTokenizer st;
    static void rl() throws Exception{ st = new StringTokenizer(br.readLine()); }
    static long nlo(){ return Long.parseLong(st.nextToken()); }
    static int nin(){ return Integer.parseInt(st.nextToken()); }
    /*private static void te(){}*/
    static double ndo(){ return Double.parseDouble(st.nextToken()); }
    static char[] nca(){ return st.nextToken().toCharArray(); }
} Main static BufferedReader br; br static BufferedWriter bw; bw static StringTokenizer st; st public static void main (String[] args) throws Exception {

        String s = "-1000000000 0 -1000000000 0";

//        br = new BufferedReader(new StringReader(s));
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));

        rl(); long a = nlo(), b=nlo(), c=nlo(), d=nlo();
        if (a<=0 && b<=0 && c>=0 && d>=0) {
            bw.write( (b*c) + "\n");
        } else if (a>=0 && b>=0 && c<=0 && d<=0) {
            bw.write( (a*d) + "\n");
        } else {
            bw.write( Math.max(a*c, b*d) + "\n");
        }
        bw.flush();
    } main {

        String s = "-1000000000 0 -1000000000 0";

//        br = new BufferedReader(new StringReader(s));
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));

        rl(); long a = nlo(), b=nlo(), c=nlo(), d=nlo();
        if (a<=0 && b<=0 && c>=0 && d>=0) {
            bw.write( (b*c) + "\n");
        } else if (a>=0 && b>=0 && c<=0 && d<=0) {
            bw.write( (a*d) + "\n");
        } else {
            bw.write( Math.max(a*c, b*d) + "\n");
        }
        bw.flush();
    } String s = "-1000000000 0 -1000000000 0"; s "-1000000000 0 -1000000000 0" br = new BufferedReader(new InputStreamReader(System.in)) br new BufferedReader(new InputStreamReader(System.in)) bw = new BufferedWriter(new OutputStreamWriter(System.out)) bw new BufferedWriter(new OutputStreamWriter(System.out)) rl() rl long a = nlo() a nlo() nlo b=nlo() b nlo() nlo c=nlo() c nlo() nlo d=nlo(); d nlo() nlo if (a<=0 && b<=0 && c>=0 && d>=0) {
            bw.write( (b*c) + "\n");
        } else if (a>=0 && b>=0 && c<=0 && d<=0) {
            bw.write( (a*d) + "\n");
        } else {
            bw.write( Math.max(a*c, b*d) + "\n");
        } a<=0 && b<=0 && c>=0 && d>=0 c>=0 a<=0 && b<=0 && c>=0 && d>=0 a<=0 a 0 b<=0 b 0 c>=0 c 0 d>=0 d 0 {
            bw.write( (b*c) + "\n");
        } bw.write( (b*c) + "\n") bw.write bw (b*c) + "\n" (b*c) b c "\n" if (a>=0 && b>=0 && c<=0 && d<=0) {
            bw.write( (a*d) + "\n");
        } else {
            bw.write( Math.max(a*c, b*d) + "\n");
        } a>=0 && b>=0 && c<=0 && d<=0 c<=0 a>=0 && b>=0 && c<=0 && d<=0 a>=0 a 0 b>=0 b 0 c<=0 c 0 d<=0 d 0 {
            bw.write( (a*d) + "\n");
        } bw.write( (a*d) + "\n") bw.write bw (a*d) + "\n" (a*d) a d "\n" {
            bw.write( Math.max(a*c, b*d) + "\n");
        } bw.write( Math.max(a*c, b*d) + "\n") bw.write bw Math.max(a*c, b*d) + "\n" Math.max(a*c, b*d) Math.max Math a*c a c b*d b d "\n" bw.flush() bw.flush bw String[] args args static void rl() throws Exception{ st = new StringTokenizer(br.readLine()); } rl { st = new StringTokenizer(br.readLine()); } st = new StringTokenizer(br.readLine()) st new StringTokenizer(br.readLine()) static long nlo(){ return Long.parseLong(st.nextToken()); } nlo { return Long.parseLong(st.nextToken()); } return Long.parseLong(st.nextToken()); Long.parseLong(st.nextToken()) Long.parseLong Long st.nextToken() st.nextToken st static int nin(){ return Integer.parseInt(st.nextToken()); } nin { return Integer.parseInt(st.nextToken()); } return Integer.parseInt(st.nextToken()); Integer.parseInt(st.nextToken()) Integer.parseInt Integer st.nextToken() st.nextToken st /*private static void te(){}*/
    static double ndo(){ return Double.parseDouble(st.nextToken()); } ndo { return Double.parseDouble(st.nextToken()); } return Double.parseDouble(st.nextToken()); Double.parseDouble(st.nextToken()) Double.parseDouble Double st.nextToken() st.nextToken st static char[] nca(){ return st.nextToken().toCharArray(); } nca { return st.nextToken().toCharArray(); } return st.nextToken().toCharArray(); st.nextToken().toCharArray() st.nextToken().toCharArray st.nextToken() st.nextToken st public class Main {

    public static void main (String[] args) throws Exception {

        String s = "-1000000000 0 -1000000000 0";

//        br = new BufferedReader(new StringReader(s));
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));

        rl(); long a = nlo(), b=nlo(), c=nlo(), d=nlo();
        if (a<=0 && b<=0 && c>=0 && d>=0) {
            bw.write( (b*c) + "\n");
        } else if (a>=0 && b>=0 && c<=0 && d<=0) {
            bw.write( (a*d) + "\n");
        } else {
            bw.write( Math.max(a*c, b*d) + "\n");
        }
        bw.flush();
    }

    static BufferedReader br; static BufferedWriter bw; static StringTokenizer st;
    static void rl() throws Exception{ st = new StringTokenizer(br.readLine()); }
    static long nlo(){ return Long.parseLong(st.nextToken()); }
    static int nin(){ return Integer.parseInt(st.nextToken()); }
    /*private static void te(){}*/
    static double ndo(){ return Double.parseDouble(st.nextToken()); }
    static char[] nca(){ return st.nextToken().toCharArray(); }
} public class Main {

    public static void main (String[] args) throws Exception {

        String s = "-1000000000 0 -1000000000 0";

//        br = new BufferedReader(new StringReader(s));
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));

        rl(); long a = nlo(), b=nlo(), c=nlo(), d=nlo();
        if (a<=0 && b<=0 && c>=0 && d>=0) {
            bw.write( (b*c) + "\n");
        } else if (a>=0 && b>=0 && c<=0 && d<=0) {
            bw.write( (a*d) + "\n");
        } else {
            bw.write( Math.max(a*c, b*d) + "\n");
        }
        bw.flush();
    }

    static BufferedReader br; static BufferedWriter bw; static StringTokenizer st;
    static void rl() throws Exception{ st = new StringTokenizer(br.readLine()); }
    static long nlo(){ return Long.parseLong(st.nextToken()); }
    static int nin(){ return Integer.parseInt(st.nextToken()); }
    /*private static void te(){}*/
    static double ndo(){ return Double.parseDouble(st.nextToken()); }
    static char[] nca(){ return st.nextToken().toCharArray(); }
} Main
//package atcoder.beginner_178;

import java.io.*;
import java.util.StringTokenizer;

public class Main {

    public static void main (String[] args) throws Exception {

        String s = "-1000000000 0 -1000000000 0";

//        br = new BufferedReader(new StringReader(s));
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));

        rl(); long a = nlo(), b=nlo(), c=nlo(), d=nlo();
        if (a<=0 && b<=0 && c>=0 && d>=0) {
            bw.write( (b*c) + "\n");
        } else if (a>=0 && b>=0 && c<=0 && d<=0) {
            bw.write( (a*d) + "\n");
        } else {
            bw.write( Math.max(a*c, b*d) + "\n");
        }
        bw.flush();
    }

    static BufferedReader br; static BufferedWriter bw; static StringTokenizer st;
    static void rl() throws Exception{ st = new StringTokenizer(br.readLine()); }
    static long nlo(){ return Long.parseLong(st.nextToken()); }
    static int nin(){ return Integer.parseInt(st.nextToken()); }
    /*private static void te(){}*/
    static double ndo(){ return Double.parseDouble(st.nextToken()); }
    static char[] nca(){ return st.nextToken().toCharArray(); }
}
