
import java.util.Scanner;

public class Main {

    static Scanner scanner;

    public static void main(String[] args) {
        scanner = new Scanner(System.in);

        long a=gl();
        long b=gl();
        long c=gl();
        long d=gl();


        if(a>=0 && c>=0) {
            System.out.println(b*d);
        } else if(a>=0 && d<0) {
        	System.out.println(a*d);
        } else if(c>=0 && b<0) {
        	System.out.println(c*b);
        } else if(a>=0) {
        	System.out.println(b*d);
        } else if(c>=0) {
        	System.out.println(b*d);
        } else {
        	System.out.println(Math.max(a*c, b*d));
        }
    }

    // 文字列として入力を取得
    public static String gs() {
         return scanner.next();
    }

    // intとして入力を取得
    public static int gi() {
         return Integer.parseInt(scanner.next());
    }

    // longとして入力を取得
    public static long gl() {
         return Long.parseLong(scanner.next());
    }

    // doubleとして入力を取得
    public static double gd() {
         return Double.parseDouble(scanner.next());
    }
} import java.util.Scanner; Scanner java.util public class Main {

    static Scanner scanner;

    public static void main(String[] args) {
        scanner = new Scanner(System.in);

        long a=gl();
        long b=gl();
        long c=gl();
        long d=gl();


        if(a>=0 && c>=0) {
            System.out.println(b*d);
        } else if(a>=0 && d<0) {
        	System.out.println(a*d);
        } else if(c>=0 && b<0) {
        	System.out.println(c*b);
        } else if(a>=0) {
        	System.out.println(b*d);
        } else if(c>=0) {
        	System.out.println(b*d);
        } else {
        	System.out.println(Math.max(a*c, b*d));
        }
    }

    // 文字列として入力を取得
    public static String gs() {
         return scanner.next();
    }

    // intとして入力を取得
    public static int gi() {
         return Integer.parseInt(scanner.next());
    }

    // longとして入力を取得
    public static long gl() {
         return Long.parseLong(scanner.next());
    }

    // doubleとして入力を取得
    public static double gd() {
         return Double.parseDouble(scanner.next());
    }
} Main static Scanner scanner; scanner public static void main(String[] args) {
        scanner = new Scanner(System.in);

        long a=gl();
        long b=gl();
        long c=gl();
        long d=gl();


        if(a>=0 && c>=0) {
            System.out.println(b*d);
        } else if(a>=0 && d<0) {
        	System.out.println(a*d);
        } else if(c>=0 && b<0) {
        	System.out.println(c*b);
        } else if(a>=0) {
        	System.out.println(b*d);
        } else if(c>=0) {
        	System.out.println(b*d);
        } else {
        	System.out.println(Math.max(a*c, b*d));
        }
    } main {
        scanner = new Scanner(System.in);

        long a=gl();
        long b=gl();
        long c=gl();
        long d=gl();


        if(a>=0 && c>=0) {
            System.out.println(b*d);
        } else if(a>=0 && d<0) {
        	System.out.println(a*d);
        } else if(c>=0 && b<0) {
        	System.out.println(c*b);
        } else if(a>=0) {
        	System.out.println(b*d);
        } else if(c>=0) {
        	System.out.println(b*d);
        } else {
        	System.out.println(Math.max(a*c, b*d));
        }
    } scanner = new Scanner(System.in) scanner new Scanner(System.in) long a=gl(); a gl() gl long b=gl(); b gl() gl long c=gl(); c gl() gl long d=gl(); d gl() gl if(a>=0 && c>=0) {
            System.out.println(b*d);
        } else if(a>=0 && d<0) {
        	System.out.println(a*d);
        } else if(c>=0 && b<0) {
        	System.out.println(c*b);
        } else if(a>=0) {
        	System.out.println(b*d);
        } else if(c>=0) {
        	System.out.println(b*d);
        } else {
        	System.out.println(Math.max(a*c, b*d));
        } a>=0 && c>=0 a>=0 a 0 c>=0 c 0 {
            System.out.println(b*d);
        } System.out.println(b*d) System.out.println System.out System System.out b*d b d if(a>=0 && d<0) {
        	System.out.println(a*d);
        } else if(c>=0 && b<0) {
        	System.out.println(c*b);
        } else if(a>=0) {
        	System.out.println(b*d);
        } else if(c>=0) {
        	System.out.println(b*d);
        } else {
        	System.out.println(Math.max(a*c, b*d));
        } a>=0 && d<0 a>=0 a 0 d<0 d 0 {
        	System.out.println(a*d);
        } System.out.println(a*d) System.out.println System.out System System.out a*d a d if(c>=0 && b<0) {
        	System.out.println(c*b);
        } else if(a>=0) {
        	System.out.println(b*d);
        } else if(c>=0) {
        	System.out.println(b*d);
        } else {
        	System.out.println(Math.max(a*c, b*d));
        } c>=0 && b<0 c>=0 c 0 b<0 b 0 {
        	System.out.println(c*b);
        } System.out.println(c*b) System.out.println System.out System System.out c*b c b if(a>=0) {
        	System.out.println(b*d);
        } else if(c>=0) {
        	System.out.println(b*d);
        } else {
        	System.out.println(Math.max(a*c, b*d));
        } a>=0 a 0 {
        	System.out.println(b*d);
        } System.out.println(b*d) System.out.println System.out System System.out b*d b d if(c>=0) {
        	System.out.println(b*d);
        } else {
        	System.out.println(Math.max(a*c, b*d));
        } c>=0 c 0 {
        	System.out.println(b*d);
        } System.out.println(b*d) System.out.println System.out System System.out b*d b d {
        	System.out.println(Math.max(a*c, b*d));
        } System.out.println(Math.max(a*c, b*d)) System.out.println System.out System System.out Math.max(a*c, b*d) Math.max Math a*c a c b*d b d String[] args args // 文字列として入力を取得
    public static String gs() {
         return scanner.next();
    } gs {
         return scanner.next();
    } return scanner.next(); scanner.next() scanner.next scanner // intとして入力を取得
    public static int gi() {
         return Integer.parseInt(scanner.next());
    } gi {
         return Integer.parseInt(scanner.next());
    } return Integer.parseInt(scanner.next()); Integer.parseInt(scanner.next()) Integer.parseInt Integer scanner.next() scanner.next scanner // longとして入力を取得
    public static long gl() {
         return Long.parseLong(scanner.next());
    } gl {
         return Long.parseLong(scanner.next());
    } return Long.parseLong(scanner.next()); Long.parseLong(scanner.next()) Long.parseLong Long scanner.next() scanner.next scanner // doubleとして入力を取得
    public static double gd() {
         return Double.parseDouble(scanner.next());
    } gd {
         return Double.parseDouble(scanner.next());
    } return Double.parseDouble(scanner.next()); Double.parseDouble(scanner.next()) Double.parseDouble Double scanner.next() scanner.next scanner public class Main {

    static Scanner scanner;

    public static void main(String[] args) {
        scanner = new Scanner(System.in);

        long a=gl();
        long b=gl();
        long c=gl();
        long d=gl();


        if(a>=0 && c>=0) {
            System.out.println(b*d);
        } else if(a>=0 && d<0) {
        	System.out.println(a*d);
        } else if(c>=0 && b<0) {
        	System.out.println(c*b);
        } else if(a>=0) {
        	System.out.println(b*d);
        } else if(c>=0) {
        	System.out.println(b*d);
        } else {
        	System.out.println(Math.max(a*c, b*d));
        }
    }

    // 文字列として入力を取得
    public static String gs() {
         return scanner.next();
    }

    // intとして入力を取得
    public static int gi() {
         return Integer.parseInt(scanner.next());
    }

    // longとして入力を取得
    public static long gl() {
         return Long.parseLong(scanner.next());
    }

    // doubleとして入力を取得
    public static double gd() {
         return Double.parseDouble(scanner.next());
    }
} public class Main {

    static Scanner scanner;

    public static void main(String[] args) {
        scanner = new Scanner(System.in);

        long a=gl();
        long b=gl();
        long c=gl();
        long d=gl();


        if(a>=0 && c>=0) {
            System.out.println(b*d);
        } else if(a>=0 && d<0) {
        	System.out.println(a*d);
        } else if(c>=0 && b<0) {
        	System.out.println(c*b);
        } else if(a>=0) {
        	System.out.println(b*d);
        } else if(c>=0) {
        	System.out.println(b*d);
        } else {
        	System.out.println(Math.max(a*c, b*d));
        }
    }

    // 文字列として入力を取得
    public static String gs() {
         return scanner.next();
    }

    // intとして入力を取得
    public static int gi() {
         return Integer.parseInt(scanner.next());
    }

    // longとして入力を取得
    public static long gl() {
         return Long.parseLong(scanner.next());
    }

    // doubleとして入力を取得
    public static double gd() {
         return Double.parseDouble(scanner.next());
    }
} Main

import java.util.Scanner;

public class Main {

    static Scanner scanner;

    public static void main(String[] args) {
        scanner = new Scanner(System.in);

        long a=gl();
        long b=gl();
        long c=gl();
        long d=gl();


        if(a>=0 && c>=0) {
            System.out.println(b*d);
        } else if(a>=0 && d<0) {
        	System.out.println(a*d);
        } else if(c>=0 && b<0) {
        	System.out.println(c*b);
        } else if(a>=0) {
        	System.out.println(b*d);
        } else if(c>=0) {
        	System.out.println(b*d);
        } else {
        	System.out.println(Math.max(a*c, b*d));
        }
    }

    // 文字列として入力を取得
    public static String gs() {
         return scanner.next();
    }

    // intとして入力を取得
    public static int gi() {
         return Integer.parseInt(scanner.next());
    }

    // longとして入力を取得
    public static long gl() {
         return Long.parseLong(scanner.next());
    }

    // doubleとして入力を取得
    public static double gd() {
         return Double.parseDouble(scanner.next());
    }
}