import java.io.*;
import java.math.*;
import java.util.*;
import java.lang.*;

// import java.text.DecimalFormat; 
// import java.text.DecimalFormatSymbols; 
/*
 
 
 
 */

public class Main {

    public static void main(String args[] ) throws Exception {
        PrintWriter pw=new PrintWriter(System.out);
        FastScanner sc = new FastScanner();
        
        int t=1;
        //t = sc.ni();
        while(t-->0) {
        	solve(pw,sc);
        }
       
        pw.close();
    }
    
    private static void solve(PrintWriter pw, FastScanner sc) {
    	long a=sc.ni(),b = sc.ni(),c = sc.ni(),d = sc.ni();
    	long ans=0;
    	if(a>=0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	
    	else if(a<0&&b<0&&c<0&&d<0)
    		ans = a*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a>=0&&b>=0&&c<0&&d<0)
    		ans = a*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d);
    	
    	pw.print(ans);
    	
	}
    

	static <T> void deb(T x,int o){
       System.out.print(x);
       if(o==0) {
    	   System.out.println();
    	   
       }
    }
   
   
   static class FastScanner {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st=new StringTokenizer("");
		
		public String ne() {
			while (!st.hasMoreElements())
				try {
					st=new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			return st.nextToken();
		}
		public String ne(int k) {
			try {
				return br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return "Not able to read";
		}
		
		int ni() {
			return Integer.parseInt(ne());
		}
		
		long nl() {
			return Long.parseLong(ne());
		}
		
		double nd() {
			return Double.parseDouble(ne());
		}
		
	    
	}
   
} import java.io.*; io.* java import java.math.*; math.* java import java.util.*; util.* java import java.lang.*; lang.* java public class Main {

    public static void main(String args[] ) throws Exception {
        PrintWriter pw=new PrintWriter(System.out);
        FastScanner sc = new FastScanner();
        
        int t=1;
        //t = sc.ni();
        while(t-->0) {
        	solve(pw,sc);
        }
       
        pw.close();
    }
    
    private static void solve(PrintWriter pw, FastScanner sc) {
    	long a=sc.ni(),b = sc.ni(),c = sc.ni(),d = sc.ni();
    	long ans=0;
    	if(a>=0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	
    	else if(a<0&&b<0&&c<0&&d<0)
    		ans = a*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a>=0&&b>=0&&c<0&&d<0)
    		ans = a*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d);
    	
    	pw.print(ans);
    	
	}
    

	static <T> void deb(T x,int o){
       System.out.print(x);
       if(o==0) {
    	   System.out.println();
    	   
       }
    }
   
   
   static class FastScanner {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st=new StringTokenizer("");
		
		public String ne() {
			while (!st.hasMoreElements())
				try {
					st=new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			return st.nextToken();
		}
		public String ne(int k) {
			try {
				return br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return "Not able to read";
		}
		
		int ni() {
			return Integer.parseInt(ne());
		}
		
		long nl() {
			return Long.parseLong(ne());
		}
		
		double nd() {
			return Double.parseDouble(ne());
		}
		
	    
	}
   
} Main public static void main(String args[] ) throws Exception {
        PrintWriter pw=new PrintWriter(System.out);
        FastScanner sc = new FastScanner();
        
        int t=1;
        //t = sc.ni();
        while(t-->0) {
        	solve(pw,sc);
        }
       
        pw.close();
    } main {
        PrintWriter pw=new PrintWriter(System.out);
        FastScanner sc = new FastScanner();
        
        int t=1;
        //t = sc.ni();
        while(t-->0) {
        	solve(pw,sc);
        }
       
        pw.close();
    } PrintWriter pw=new PrintWriter(System.out); pw new PrintWriter(System.out) FastScanner sc = new FastScanner(); sc new FastScanner() int t=1; t 1 while(t-->0) {
        	solve(pw,sc);
        } t-->0 t-- t 0 {
        	solve(pw,sc);
        } solve(pw,sc) solve pw sc pw.close() pw.close pw String args[] args private static void solve(PrintWriter pw, FastScanner sc) {
    	long a=sc.ni(),b = sc.ni(),c = sc.ni(),d = sc.ni();
    	long ans=0;
    	if(a>=0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	
    	else if(a<0&&b<0&&c<0&&d<0)
    		ans = a*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a>=0&&b>=0&&c<0&&d<0)
    		ans = a*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d);
    	
    	pw.print(ans);
    	
	} solve {
    	long a=sc.ni(),b = sc.ni(),c = sc.ni(),d = sc.ni();
    	long ans=0;
    	if(a>=0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	
    	else if(a<0&&b<0&&c<0&&d<0)
    		ans = a*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a>=0&&b>=0&&c<0&&d<0)
    		ans = a*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d);
    	
    	pw.print(ans);
    	
	} long a=sc.ni() a sc.ni() sc.ni sc b = sc.ni() b sc.ni() sc.ni sc c = sc.ni() c sc.ni() sc.ni sc d = sc.ni(); d sc.ni() sc.ni sc long ans=0; ans 0 if(a>=0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	
    	else if(a<0&&b<0&&c<0&&d<0)
    		ans = a*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a>=0&&b>=0&&c<0&&d<0)
    		ans = a*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d); 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 ans = b*d ans b*d b d if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	
    	else if(a<0&&b<0&&c<0&&d<0)
    		ans = a*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a>=0&&b>=0&&c<0&&d<0)
    		ans = a*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d); 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 ans = b*d ans b*d b d if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	
    	else if(a<0&&b<0&&c<0&&d<0)
    		ans = a*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a>=0&&b>=0&&c<0&&d<0)
    		ans = a*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d); 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 ans = b*d ans b*d b d if(a<0&&b<0&&c<0&&d<0)
    		ans = a*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a>=0&&b>=0&&c<0&&d<0)
    		ans = a*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d); 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 ans = a*c ans a*c a c if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a>=0&&b>=0&&c<0&&d<0)
    		ans = a*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d); 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 ans = a*c ans a*c a c if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a>=0&&b>=0&&c<0&&d<0)
    		ans = a*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d); 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 ans = a*c ans a*c a c if(a>=0&&b>=0&&c<0&&d<0)
    		ans = a*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d); 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 ans = a*d ans a*d a d if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d); 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 ans = b*d ans b*d b d if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d); 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 ans = a*c ans a*c a c if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d); 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 ans = b*c ans b*c b c if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d); 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 ans = a*c ans a*c a c if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d); 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 ans = b*d ans b*d b d if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d); 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 ans = Math.max(a*c, b*d) ans Math.max(a*c, b*d) Math.max Math a*c a c b*d b d pw.print(ans) pw.print pw ans PrintWriter pw pw FastScanner sc sc static <T> void deb(T x,int o){
       System.out.print(x);
       if(o==0) {
    	   System.out.println();
    	   
       }
    } deb {
       System.out.print(x);
       if(o==0) {
    	   System.out.println();
    	   
       }
    } System.out.print(x) System.out.print System.out System System.out x if(o==0) {
    	   System.out.println();
    	   
       } o==0 o 0 {
    	   System.out.println();
    	   
       } System.out.println() System.out.println System.out System System.out T x x int o o static class FastScanner {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st=new StringTokenizer("");
		
		public String ne() {
			while (!st.hasMoreElements())
				try {
					st=new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			return st.nextToken();
		}
		public String ne(int k) {
			try {
				return br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return "Not able to read";
		}
		
		int ni() {
			return Integer.parseInt(ne());
		}
		
		long nl() {
			return Long.parseLong(ne());
		}
		
		double nd() {
			return Double.parseDouble(ne());
		}
		
	    
	} FastScanner BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); br new BufferedReader(new InputStreamReader(System.in)) StringTokenizer st=new StringTokenizer(""); st new StringTokenizer("") public String ne() {
			while (!st.hasMoreElements())
				try {
					st=new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			return st.nextToken();
		} ne {
			while (!st.hasMoreElements())
				try {
					st=new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			return st.nextToken();
		} while (!st.hasMoreElements())
				try {
					st=new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				} !st.hasMoreElements() st.hasMoreElements() st.hasMoreElements st try {
					st=new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				} IOException e {
					e.printStackTrace();
				} e.printStackTrace() e.printStackTrace e {
					st=new StringTokenizer(br.readLine());
				} st=new StringTokenizer(br.readLine()) st new StringTokenizer(br.readLine()) return st.nextToken(); st.nextToken() st.nextToken st public String ne(int k) {
			try {
				return br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return "Not able to read";
		} ne {
			try {
				return br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return "Not able to read";
		} try {
				return br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} IOException e {
				e.printStackTrace();
			} e.printStackTrace() e.printStackTrace e {
				return br.readLine();
			} return br.readLine(); br.readLine() br.readLine br return "Not able to read"; "Not able to read" int k k int ni() {
			return Integer.parseInt(ne());
		} ni {
			return Integer.parseInt(ne());
		} return Integer.parseInt(ne()); Integer.parseInt(ne()) Integer.parseInt Integer ne() ne long nl() {
			return Long.parseLong(ne());
		} nl {
			return Long.parseLong(ne());
		} return Long.parseLong(ne()); Long.parseLong(ne()) Long.parseLong Long ne() ne double nd() {
			return Double.parseDouble(ne());
		} nd {
			return Double.parseDouble(ne());
		} return Double.parseDouble(ne()); Double.parseDouble(ne()) Double.parseDouble Double ne() ne public class Main {

    public static void main(String args[] ) throws Exception {
        PrintWriter pw=new PrintWriter(System.out);
        FastScanner sc = new FastScanner();
        
        int t=1;
        //t = sc.ni();
        while(t-->0) {
        	solve(pw,sc);
        }
       
        pw.close();
    }
    
    private static void solve(PrintWriter pw, FastScanner sc) {
    	long a=sc.ni(),b = sc.ni(),c = sc.ni(),d = sc.ni();
    	long ans=0;
    	if(a>=0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	
    	else if(a<0&&b<0&&c<0&&d<0)
    		ans = a*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a>=0&&b>=0&&c<0&&d<0)
    		ans = a*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d);
    	
    	pw.print(ans);
    	
	}
    

	static <T> void deb(T x,int o){
       System.out.print(x);
       if(o==0) {
    	   System.out.println();
    	   
       }
    }
   
   
   static class FastScanner {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st=new StringTokenizer("");
		
		public String ne() {
			while (!st.hasMoreElements())
				try {
					st=new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			return st.nextToken();
		}
		public String ne(int k) {
			try {
				return br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return "Not able to read";
		}
		
		int ni() {
			return Integer.parseInt(ne());
		}
		
		long nl() {
			return Long.parseLong(ne());
		}
		
		double nd() {
			return Double.parseDouble(ne());
		}
		
	    
	}
   
} public class Main {

    public static void main(String args[] ) throws Exception {
        PrintWriter pw=new PrintWriter(System.out);
        FastScanner sc = new FastScanner();
        
        int t=1;
        //t = sc.ni();
        while(t-->0) {
        	solve(pw,sc);
        }
       
        pw.close();
    }
    
    private static void solve(PrintWriter pw, FastScanner sc) {
    	long a=sc.ni(),b = sc.ni(),c = sc.ni(),d = sc.ni();
    	long ans=0;
    	if(a>=0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	
    	else if(a<0&&b<0&&c<0&&d<0)
    		ans = a*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a>=0&&b>=0&&c<0&&d<0)
    		ans = a*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d);
    	
    	pw.print(ans);
    	
	}
    

	static <T> void deb(T x,int o){
       System.out.print(x);
       if(o==0) {
    	   System.out.println();
    	   
       }
    }
   
   
   static class FastScanner {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st=new StringTokenizer("");
		
		public String ne() {
			while (!st.hasMoreElements())
				try {
					st=new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			return st.nextToken();
		}
		public String ne(int k) {
			try {
				return br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return "Not able to read";
		}
		
		int ni() {
			return Integer.parseInt(ne());
		}
		
		long nl() {
			return Long.parseLong(ne());
		}
		
		double nd() {
			return Double.parseDouble(ne());
		}
		
	    
	}
   
} Main
import java.io.*;
import java.math.*;
import java.util.*;
import java.lang.*;

// import java.text.DecimalFormat; 
// import java.text.DecimalFormatSymbols; 
/*
 
 
 
 */

public class Main {

    public static void main(String args[] ) throws Exception {
        PrintWriter pw=new PrintWriter(System.out);
        FastScanner sc = new FastScanner();
        
        int t=1;
        //t = sc.ni();
        while(t-->0) {
        	solve(pw,sc);
        }
       
        pw.close();
    }
    
    private static void solve(PrintWriter pw, FastScanner sc) {
    	long a=sc.ni(),b = sc.ni(),c = sc.ni(),d = sc.ni();
    	long ans=0;
    	if(a>=0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	
    	else if(a<0&&b<0&&c<0&&d<0)
    		ans = a*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a>=0&&b>=0&&c<0&&d<0)
    		ans = a*d;
    	else if(a>=0&&b>=0&&c<0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d<0)
    		ans = a*c;
    	
    	else if(a<0&&b<0&&c>=0&&d>=0)
    		ans = b*c;
    	else if(a<0&&b<0&&c<0&&d>=0)
    		ans = a*c;
    	else if(a<0&&b>=0&&c>=0&&d>=0)
    		ans = b*d;
    	else if(a<0&&b>=0&&c<0&&d>=0)
    		ans = Math.max(a*c, b*d);
    	
    	pw.print(ans);
    	
	}
    

	static <T> void deb(T x,int o){
       System.out.print(x);
       if(o==0) {
    	   System.out.println();
    	   
       }
    }
   
   
   static class FastScanner {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st=new StringTokenizer("");
		
		public String ne() {
			while (!st.hasMoreElements())
				try {
					st=new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			return st.nextToken();
		}
		public String ne(int k) {
			try {
				return br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return "Not able to read";
		}
		
		int ni() {
			return Integer.parseInt(ne());
		}
		
		long nl() {
			return Long.parseLong(ne());
		}
		
		double nd() {
			return Double.parseDouble(ne());
		}
		
	    
	}
   
}