//Created by Amaxul on 9/13/2020.

import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Scanner;

import static java.lang.Math.max;

public class Main {
    public static void main(String[] args) throws Exception {
        Scanner in = new Scanner(System.in);
        PrintWriter pw = new PrintWriter(System.out);
        long a = in.nextInt(), b = in.nextInt();
        long c = in.nextInt(), d = in.nextInt();

        long max = getMin(a, b, c, d);
        pw.println(max);

        pw.close();
    }

    static long getMin(long a, long b, long c, long d) {
        long max = a * c;
        max = max(max, a * d);
        max = max(max, b * c);
        max = max(max, b * d);
        if ((a <= 0 && b >= 0) || (c <= 0 && d >= 0)) {
            max = max(max, 0);
        }
        return max;
    }

    static void debug(Object... obj) {
        System.err.println(Arrays.deepToString(obj));
    }
} import java.io.PrintWriter; PrintWriter java.io import java.util.Arrays; Arrays java.util import java.util.Scanner; Scanner java.util import static java.lang.Math.max; import static java.lang.Math.max; import static java.lang.Math.max; public class Main {
    public static void main(String[] args) throws Exception {
        Scanner in = new Scanner(System.in);
        PrintWriter pw = new PrintWriter(System.out);
        long a = in.nextInt(), b = in.nextInt();
        long c = in.nextInt(), d = in.nextInt();

        long max = getMin(a, b, c, d);
        pw.println(max);

        pw.close();
    }

    static long getMin(long a, long b, long c, long d) {
        long max = a * c;
        max = max(max, a * d);
        max = max(max, b * c);
        max = max(max, b * d);
        if ((a <= 0 && b >= 0) || (c <= 0 && d >= 0)) {
            max = max(max, 0);
        }
        return max;
    }

    static void debug(Object... obj) {
        System.err.println(Arrays.deepToString(obj));
    }
} Main public static void main(String[] args) throws Exception {
        Scanner in = new Scanner(System.in);
        PrintWriter pw = new PrintWriter(System.out);
        long a = in.nextInt(), b = in.nextInt();
        long c = in.nextInt(), d = in.nextInt();

        long max = getMin(a, b, c, d);
        pw.println(max);

        pw.close();
    } main {
        Scanner in = new Scanner(System.in);
        PrintWriter pw = new PrintWriter(System.out);
        long a = in.nextInt(), b = in.nextInt();
        long c = in.nextInt(), d = in.nextInt();

        long max = getMin(a, b, c, d);
        pw.println(max);

        pw.close();
    } Scanner in = new Scanner(System.in); in new Scanner(System.in) PrintWriter pw = new PrintWriter(System.out); pw new PrintWriter(System.out) long a = in.nextInt() a in.nextInt() in.nextInt in b = in.nextInt(); b in.nextInt() in.nextInt in long c = in.nextInt() c in.nextInt() in.nextInt in d = in.nextInt(); d in.nextInt() in.nextInt in long max = getMin(a, b, c, d); max getMin(a, b, c, d) getMin a b c d pw.println(max) pw.println pw max pw.close() pw.close pw String[] args args static long getMin(long a, long b, long c, long d) {
        long max = a * c;
        max = max(max, a * d);
        max = max(max, b * c);
        max = max(max, b * d);
        if ((a <= 0 && b >= 0) || (c <= 0 && d >= 0)) {
            max = max(max, 0);
        }
        return max;
    } getMin {
        long max = a * c;
        max = max(max, a * d);
        max = max(max, b * c);
        max = max(max, b * d);
        if ((a <= 0 && b >= 0) || (c <= 0 && d >= 0)) {
            max = max(max, 0);
        }
        return max;
    } long max = a * c; max a * c a c max = max(max, a * d) max max(max, a * d) max max a * d a d max = max(max, b * c) max max(max, b * c) max max b * c b c max = max(max, b * d) max max(max, b * d) max max b * d b d if ((a <= 0 && b >= 0) || (c <= 0 && d >= 0)) {
            max = max(max, 0);
        } (a <= 0 && b >= 0) || (c <= 0 && d >= 0) (a <= 0 && b >= 0) a <= 0 a 0 b >= 0 b 0 (c <= 0 && d >= 0) c <= 0 c 0 d >= 0 d 0 {
            max = max(max, 0);
        } max = max(max, 0) max max(max, 0) max max 0 return max; max long a a long b b long c c long d d static void debug(Object... obj) {
        System.err.println(Arrays.deepToString(obj));
    } debug {
        System.err.println(Arrays.deepToString(obj));
    } System.err.println(Arrays.deepToString(obj)) System.err.println System.err System System.err Arrays.deepToString(obj) Arrays.deepToString Arrays obj Object... obj obj public class Main {
    public static void main(String[] args) throws Exception {
        Scanner in = new Scanner(System.in);
        PrintWriter pw = new PrintWriter(System.out);
        long a = in.nextInt(), b = in.nextInt();
        long c = in.nextInt(), d = in.nextInt();

        long max = getMin(a, b, c, d);
        pw.println(max);

        pw.close();
    }

    static long getMin(long a, long b, long c, long d) {
        long max = a * c;
        max = max(max, a * d);
        max = max(max, b * c);
        max = max(max, b * d);
        if ((a <= 0 && b >= 0) || (c <= 0 && d >= 0)) {
            max = max(max, 0);
        }
        return max;
    }

    static void debug(Object... obj) {
        System.err.println(Arrays.deepToString(obj));
    }
} public class Main {
    public static void main(String[] args) throws Exception {
        Scanner in = new Scanner(System.in);
        PrintWriter pw = new PrintWriter(System.out);
        long a = in.nextInt(), b = in.nextInt();
        long c = in.nextInt(), d = in.nextInt();

        long max = getMin(a, b, c, d);
        pw.println(max);

        pw.close();
    }

    static long getMin(long a, long b, long c, long d) {
        long max = a * c;
        max = max(max, a * d);
        max = max(max, b * c);
        max = max(max, b * d);
        if ((a <= 0 && b >= 0) || (c <= 0 && d >= 0)) {
            max = max(max, 0);
        }
        return max;
    }

    static void debug(Object... obj) {
        System.err.println(Arrays.deepToString(obj));
    }
} Main
//Created by Amaxul on 9/13/2020.

import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Scanner;

import static java.lang.Math.max;

public class Main {
    public static void main(String[] args) throws Exception {
        Scanner in = new Scanner(System.in);
        PrintWriter pw = new PrintWriter(System.out);
        long a = in.nextInt(), b = in.nextInt();
        long c = in.nextInt(), d = in.nextInt();

        long max = getMin(a, b, c, d);
        pw.println(max);

        pw.close();
    }

    static long getMin(long a, long b, long c, long d) {
        long max = a * c;
        max = max(max, a * d);
        max = max(max, b * c);
        max = max(max, b * d);
        if ((a <= 0 && b >= 0) || (c <= 0 && d >= 0)) {
            max = max(max, 0);
        }
        return max;
    }

    static void debug(Object... obj) {
        System.err.println(Arrays.deepToString(obj));
    }
}