#include<bits/stdc++.h>
#define lli long long int
#define ll long long 
#define dd double
#define endl "\n"
#define mod 1000000007
#define pb push_back
#define fast ios_base::sync_with_stdio(false);cin.tie(NULL);
#define limit 1000000000000000000
const double pi=3.14159265358;

using namespace std;
lli prm[1000001];
lli mulmod(lli a, lli b,lli c){
    lli x = 0,y=a%c;
    while(b > 0){
    if(b%2 == 1){
        x = (x+y)%c;
    }
    y = (y*2LL)%c;
    b /= 2;
    }
    return x%c;
}
 
lli binPower(lli a , lli n , lli m)
{
	lli res = 1;
 
	while(n)
	{
		if(n & 1)
		res = mulmod(res , a , m);
 
		n >>= 1;
		a = mulmod(a , a , m);
	}
 
	return res % m;
}
int printNcR(int n, int r) 
{ 
  
    // p holds the value of n*(n-1)*(n-2)..., 
    // k holds the value of r*(r-1)... 
    long long p = 1, k = 1; 
  
    // C(n, r) == C(n, n-r), 
    // choosing the smaller value 
    if (n - r < r) 
        r = n - r; 
  
    if (r != 0) { 
        while (r) { 
            p *= n; 
            k *= r; 
  
            // gcd of p, k 
            long long m = __gcd(p, k); 
  
            // dividing by gcd, to simplify product 
            // division by their gcd saves from the overflow 
            p /= m; 
            k /= m; 
  
            n--; 
            r--; 
        } 
  
        // k should be simplified to 1 
        // as C(n, r) is a natural number 
        // (denominator should be 1 ) . 
    } 
  
    else
        p = 1; 
  
    // if our approach is correct p = ans and k =1 
    return p; 
} 
lli find_max(lli ar[],lli n)
{
	lli x=ar[0];
	for(int i=0;i<n;i++)if(ar[i]>x)x=ar[i];
	return x;
	
}
lli power(lli x,lli y)
{
	lli res=1;
	while(y)
	{
		if(y%2!=0)
		{
			res=(res%mod*x%mod)%mod;
			y--;
		}
		else
		{
			x=(x%mod*x%mod)%mod;
			y/=2;
		}
	}
	return res;
}
lli prosieve(int maxn)
{
	
	lli ar[maxn+1];
	lli cnt=0;
	for(int i=0;i<1000001;i++)prm[i]=0;
	for(int i=0;i<maxn+1;i++)ar[i]=1;
	ar[1]=0;
	ar[0]=0;
	for(int i=2;i*i<=maxn;i++)
	{
		if(ar[i]==1)
		{
			cnt=0;
			for(int j=2*i;j<=maxn;j+=i)
			{
				if(ar[j]==1)
				cnt++;
				
				ar[j]=0;
			}
			prm[i]=cnt+1;
			cnt=0;		
		}
	}
}
int xnor(int a, int b) 
{ 
    // Make sure a is larger 
    if (a < b) 
        swap(a, b);  
  
    if (a == 0 && b == 0)  
        return 1;  
  
    int a_rem = 0; // for last bit of a 
    int b_rem = 0; // for last bit of b 
  
    // counter for count bit  
    // and set bit  in xnornum 
    int count = 0;  
  
    // to make new xnor number 
    int xnornum = 0; 
  
    // for set bits in new xnor number 
    while (a)  
    { 
        // get last bit of a 
        a_rem = a & 1;  
  
        // get last bit of b 
        b_rem = b & 1;  
  
        // Check if current two 
        // bits are same 
        if (a_rem == b_rem)         
            xnornum |= (1 << count); 
          
        // counter for count bit 
        count++;  
        a = a >> 1; 
        b = b >> 1;  
    } 
    return xnornum; 
} 
lli binary(lli x,ll y,lli i,lli j)
{
	if((x+i)==(y+j))return 1;
	lli cnt=1;
	lli x1=x+i;
	lli y1=y+j;
	for(int i=0;i<10;i++)
	{
	//	cout<<x1<<" "<<y1<<endl;
	
		if(x1==y1)return cnt;
		x1+=x;
		y1+=y;
		cnt++;
	}
	
	return -1;
}
bool fermat_prime(lli n,lli iter=5)
{
	if(n==4)
	return n==2||n==3;
	
	for(int i=0;i<iter;i++)
	{
		lli a=2+rand()%(n-3);
		if(binPower(a,n-1,n)!=1)
		return false;
	}
	return true;
}
int main()
{
	fast
	lli a,b,c,d;
	cin>>a>>b>>c>>d;
	
	lli m=a*c;
	m=max(m,a*d);
	m=max(m,b*c);
	m=max(m,b*d);
	
	cout<<m<<endl;
	
	
}
		



Measured memory_bytes: 3652