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

public class Main{

	private static final long mod =(long)1e9+7;
	public static void main(String[] args) throws Exception  {
	      Scanner  sc=new Scanner(System.in);
	      PrintWriter out=new PrintWriter(System.out);
	      long a=sc.nextLong(),b=sc.nextLong(),c=sc.nextLong(),d=sc.nextLong();
	   long aa[]= {a,b};
	   long bb[]= {c,d};
	   long ans=Long.MIN_VALUE;
	   for(int i=0;i<2;i++) {
	     for(int j=0;j<2;j++) {
	       ans=Math.max(ans,aa[i]*bb[j]*1l);
	     }
	   }
	   out.println(ans);

	    out.flush();
	    }
//	    static long binarySearch(long i,long j,long a[]) {
//	      
//	    }
	
	static boolean vis[]=new boolean[10001];
	      static long gcd(long a, long b) 
	      { 
	          if (a == 0) 
	              return b; 
	          return gcd(b % a, a); 
	      } 
//	    static  void dfs(long n,boolean flag,ArrayList<ArrayList<longeger>> adj,long src,boolean vis[],ArrayList<longeger> centroid,long size[]) {
//	        vis[src]=true;
//	        size[src]=1;
//	        for(long i:adj.get(src)) {
//	          if(vis[i]==false){
//	            dfs(n,flag,adj,i,vis,centroid,size);
//	            size[src]+=size[i];
//	            if(size[i]>n/2) {
//	              flag=false;
//	            }
//	          }
//	        }
//	        if(n-size[src]>n/2) {
//	          flag=false;
//	        }
//	        if(flag==true) {
//	          centroid.add(src);
//	        }
//	    }
//	
//	     
//	      
} import java.util.*; util.* java import java.io.*; io.* java public class Main{

	private static final long mod =(long)1e9+7;
	public static void main(String[] args) throws Exception  {
	      Scanner  sc=new Scanner(System.in);
	      PrintWriter out=new PrintWriter(System.out);
	      long a=sc.nextLong(),b=sc.nextLong(),c=sc.nextLong(),d=sc.nextLong();
	   long aa[]= {a,b};
	   long bb[]= {c,d};
	   long ans=Long.MIN_VALUE;
	   for(int i=0;i<2;i++) {
	     for(int j=0;j<2;j++) {
	       ans=Math.max(ans,aa[i]*bb[j]*1l);
	     }
	   }
	   out.println(ans);

	    out.flush();
	    }
//	    static long binarySearch(long i,long j,long a[]) {
//	      
//	    }
	
	static boolean vis[]=new boolean[10001];
	      static long gcd(long a, long b) 
	      { 
	          if (a == 0) 
	              return b; 
	          return gcd(b % a, a); 
	      } 
//	    static  void dfs(long n,boolean flag,ArrayList<ArrayList<longeger>> adj,long src,boolean vis[],ArrayList<longeger> centroid,long size[]) {
//	        vis[src]=true;
//	        size[src]=1;
//	        for(long i:adj.get(src)) {
//	          if(vis[i]==false){
//	            dfs(n,flag,adj,i,vis,centroid,size);
//	            size[src]+=size[i];
//	            if(size[i]>n/2) {
//	              flag=false;
//	            }
//	          }
//	        }
//	        if(n-size[src]>n/2) {
//	          flag=false;
//	        }
//	        if(flag==true) {
//	          centroid.add(src);
//	        }
//	    }
//	
//	     
//	      
} Main private static final long mod =(long)1e9+7; mod (long)1e9+7 (long)1e9 7 static boolean vis[]=new boolean[10001]; vis new boolean[10001] 10001 public static void main(String[] args) throws Exception  {
	      Scanner  sc=new Scanner(System.in);
	      PrintWriter out=new PrintWriter(System.out);
	      long a=sc.nextLong(),b=sc.nextLong(),c=sc.nextLong(),d=sc.nextLong();
	   long aa[]= {a,b};
	   long bb[]= {c,d};
	   long ans=Long.MIN_VALUE;
	   for(int i=0;i<2;i++) {
	     for(int j=0;j<2;j++) {
	       ans=Math.max(ans,aa[i]*bb[j]*1l);
	     }
	   }
	   out.println(ans);

	    out.flush();
	    } main {
	      Scanner  sc=new Scanner(System.in);
	      PrintWriter out=new PrintWriter(System.out);
	      long a=sc.nextLong(),b=sc.nextLong(),c=sc.nextLong(),d=sc.nextLong();
	   long aa[]= {a,b};
	   long bb[]= {c,d};
	   long ans=Long.MIN_VALUE;
	   for(int i=0;i<2;i++) {
	     for(int j=0;j<2;j++) {
	       ans=Math.max(ans,aa[i]*bb[j]*1l);
	     }
	   }
	   out.println(ans);

	    out.flush();
	    } Scanner  sc=new Scanner(System.in); sc new Scanner(System.in) PrintWriter out=new PrintWriter(System.out); out new PrintWriter(System.out) long a=sc.nextLong() a sc.nextLong() sc.nextLong sc b=sc.nextLong() b sc.nextLong() sc.nextLong sc c=sc.nextLong() c sc.nextLong() sc.nextLong sc d=sc.nextLong(); d sc.nextLong() sc.nextLong sc long aa[]= {a,b}; aa {a,b} a b long bb[]= {c,d}; bb {c,d} c d long ans=Long.MIN_VALUE; ans Long.MIN_VALUE Long Long.MIN_VALUE for(int i=0;i<2;i++) {
	     for(int j=0;j<2;j++) {
	       ans=Math.max(ans,aa[i]*bb[j]*1l);
	     }
	   } int i=0; int i=0; i 0 i<2 i 2 i++ i++ i {
	     for(int j=0;j<2;j++) {
	       ans=Math.max(ans,aa[i]*bb[j]*1l);
	     }
	   } {
	     for(int j=0;j<2;j++) {
	       ans=Math.max(ans,aa[i]*bb[j]*1l);
	     }
	   } for(int j=0;j<2;j++) {
	       ans=Math.max(ans,aa[i]*bb[j]*1l);
	     } int j=0; int j=0; j 0 j<2 j 2 j++ j++ j {
	       ans=Math.max(ans,aa[i]*bb[j]*1l);
	     } {
	       ans=Math.max(ans,aa[i]*bb[j]*1l);
	     } ans=Math.max(ans,aa[i]*bb[j]*1l) ans Math.max(ans,aa[i]*bb[j]*1l) Math.max Math ans aa[i]*bb[j]*1l aa[i]*bb[j]*1l aa[i] aa i bb[j] bb j 1l out.println(ans) out.println out ans out.flush() out.flush out String[] args args static long gcd(long a, long b) 
	      { 
	          if (a == 0) 
	              return b; 
	          return gcd(b % a, a); 
	      } gcd { 
	          if (a == 0) 
	              return b; 
	          return gcd(b % a, a); 
	      } if (a == 0) 
	              return b; a == 0 a 0 return b; b return gcd(b % a, a); gcd(b % a, a) gcd b % a b a a long a a long b b public class Main{

	private static final long mod =(long)1e9+7;
	public static void main(String[] args) throws Exception  {
	      Scanner  sc=new Scanner(System.in);
	      PrintWriter out=new PrintWriter(System.out);
	      long a=sc.nextLong(),b=sc.nextLong(),c=sc.nextLong(),d=sc.nextLong();
	   long aa[]= {a,b};
	   long bb[]= {c,d};
	   long ans=Long.MIN_VALUE;
	   for(int i=0;i<2;i++) {
	     for(int j=0;j<2;j++) {
	       ans=Math.max(ans,aa[i]*bb[j]*1l);
	     }
	   }
	   out.println(ans);

	    out.flush();
	    }
//	    static long binarySearch(long i,long j,long a[]) {
//	      
//	    }
	
	static boolean vis[]=new boolean[10001];
	      static long gcd(long a, long b) 
	      { 
	          if (a == 0) 
	              return b; 
	          return gcd(b % a, a); 
	      } 
//	    static  void dfs(long n,boolean flag,ArrayList<ArrayList<longeger>> adj,long src,boolean vis[],ArrayList<longeger> centroid,long size[]) {
//	        vis[src]=true;
//	        size[src]=1;
//	        for(long i:adj.get(src)) {
//	          if(vis[i]==false){
//	            dfs(n,flag,adj,i,vis,centroid,size);
//	            size[src]+=size[i];
//	            if(size[i]>n/2) {
//	              flag=false;
//	            }
//	          }
//	        }
//	        if(n-size[src]>n/2) {
//	          flag=false;
//	        }
//	        if(flag==true) {
//	          centroid.add(src);
//	        }
//	    }
//	
//	     
//	      
} public class Main{

	private static final long mod =(long)1e9+7;
	public static void main(String[] args) throws Exception  {
	      Scanner  sc=new Scanner(System.in);
	      PrintWriter out=new PrintWriter(System.out);
	      long a=sc.nextLong(),b=sc.nextLong(),c=sc.nextLong(),d=sc.nextLong();
	   long aa[]= {a,b};
	   long bb[]= {c,d};
	   long ans=Long.MIN_VALUE;
	   for(int i=0;i<2;i++) {
	     for(int j=0;j<2;j++) {
	       ans=Math.max(ans,aa[i]*bb[j]*1l);
	     }
	   }
	   out.println(ans);

	    out.flush();
	    }
//	    static long binarySearch(long i,long j,long a[]) {
//	      
//	    }
	
	static boolean vis[]=new boolean[10001];
	      static long gcd(long a, long b) 
	      { 
	          if (a == 0) 
	              return b; 
	          return gcd(b % a, a); 
	      } 
//	    static  void dfs(long n,boolean flag,ArrayList<ArrayList<longeger>> adj,long src,boolean vis[],ArrayList<longeger> centroid,long size[]) {
//	        vis[src]=true;
//	        size[src]=1;
//	        for(long i:adj.get(src)) {
//	          if(vis[i]==false){
//	            dfs(n,flag,adj,i,vis,centroid,size);
//	            size[src]+=size[i];
//	            if(size[i]>n/2) {
//	              flag=false;
//	            }
//	          }
//	        }
//	        if(n-size[src]>n/2) {
//	          flag=false;
//	        }
//	        if(flag==true) {
//	          centroid.add(src);
//	        }
//	    }
//	
//	     
//	      
} Main

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

public class Main{

	private static final long mod =(long)1e9+7;
	public static void main(String[] args) throws Exception  {
	      Scanner  sc=new Scanner(System.in);
	      PrintWriter out=new PrintWriter(System.out);
	      long a=sc.nextLong(),b=sc.nextLong(),c=sc.nextLong(),d=sc.nextLong();
	   long aa[]= {a,b};
	   long bb[]= {c,d};
	   long ans=Long.MIN_VALUE;
	   for(int i=0;i<2;i++) {
	     for(int j=0;j<2;j++) {
	       ans=Math.max(ans,aa[i]*bb[j]*1l);
	     }
	   }
	   out.println(ans);

	    out.flush();
	    }
//	    static long binarySearch(long i,long j,long a[]) {
//	      
//	    }
	
	static boolean vis[]=new boolean[10001];
	      static long gcd(long a, long b) 
	      { 
	          if (a == 0) 
	              return b; 
	          return gcd(b % a, a); 
	      } 
//	    static  void dfs(long n,boolean flag,ArrayList<ArrayList<longeger>> adj,long src,boolean vis[],ArrayList<longeger> centroid,long size[]) {
//	        vis[src]=true;
//	        size[src]=1;
//	        for(long i:adj.get(src)) {
//	          if(vis[i]==false){
//	            dfs(n,flag,adj,i,vis,centroid,size);
//	            size[src]+=size[i];
//	            if(size[i]>n/2) {
//	              flag=false;
//	            }
//	          }
//	        }
//	        if(n-size[src]>n/2) {
//	          flag=false;
//	        }
//	        if(flag==true) {
//	          centroid.add(src);
//	        }
//	    }
//	
//	     
//	      
}