#include <bits/stdc++.h>

using namespace std;
 
 #define tr(c, i) for (__typeof((c).begin()) i = (c).begin(); i != (c).end(); i++)
#define   ipr         	pair<int, int>
#define   pb            push_back
#define   ff            first
#define   ss            second
#define fill(a,b) memset(a, b, sizeof(a))
#define   fr(i, j, k)   for (int i = j; i < k; i++)
#define   rf(i, j, k)   for (int i = j; i >= k;i--)
#define   int           long long int
#define   ll 			unsigned long long
#define   ld            long double
#define   all(x)        x.begin(), x.end()
#define   rall(x)       x.rbegin(),x.rend()
#define   mp            make_pair
#define L(x) ('a'<=x && x<='z')
#define   inf           INT_MAX
#define   read_file();	freopen("input.txt", "r", stdin);	freopen("output.txt", "w", stdout);
#define   IOS           std::ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
 
const int Maxn  =  200*1000 + 1;
const ld  pi   =  acos(-1);
const int mod =  1000000007;
const double epsilon = 1e-9; 
 
 
template<class T> ostream& operator <<(ostream &out,vector<T> &A){for(auto x:A) out<<x<<" ";return out;}
template<class T> ostream& operator <<(ostream &out,set<T> &A){for(auto x:A) out<<x<<" ";return out;}
template<class T> ostream& operator <<(ostream &out,unordered_set<T> &A){for(auto x:A) out<<x<<" ";return out;}
template <class T1,class T2>T1 powr(T1 a,T2 b){T1 res = 1;fr(i,1,b+1)res = res*a;return res;}
 
 
  
 
int calc(int a, int b, int c) {
	return abs(a - b) + abs(a - c) + abs(b - c);
}
 
 
 
int cnt(int t){
    int c=0;
     while(t>0){
           t=t&(t-1);
           c++;
       }
       return c;
}
 
 
 #define MAX 1000000
 
 
//Binary exponentiation
int binpow(int a,int b) {
    a=a%mod;
   
    int res = 1;
while (b > 0) {
        if (b & 1)res = (res * a)%mod;
        a = (a * a)%mod;
        b >>= 1;
}
return (res+mod)%mod;
}

const int  N = 10000025 ;
int prime[10000000];



/*
void SieveOfEratosthenes() 
{ 
    fr(i,0,N)prime[i]=1;
  
    prime[0]=0;
    prime[1]=0;

  
    for (int p=2; p*p<=10000000; p++) 
    { 
        
        if (prime[p] == 1) 
        {   
            for (int i=p*p; i<=10000000; i += p) 
                prime[i] = 0; 
        } 
    } 
 
} 
*/
/*

bool prime(int n){
    if(n < 2) return false;
    if(n == 2) return true;
    if(n % 2 == 0) return false;
    
    for(int i = 3;i <= n/i;i += 2)
        if(n % i == 0) return false;
    
    return true;
}

*/

 



/*

 
 vector<bool> segmentedSieve(long long L, long long R) {
    // generate all primes up to sqrt(R)
    long long lim = sqrt(R);
    vector<bool> mark(lim + 1, false);
    vector<long long> primes;
    for (long long i = 2; i <= lim; ++i) {
        if (!mark[i]) {
            primes.emplace_back(i);
            for (long long j = i * i; j <= lim; j += i)
                mark[j] = true;
        }
    }

    vector<bool> isPrime(R - L + 1, true);
    for (long long i : primes)
        for (long long j = max(i * i, (L + i - 1) / i * i); j <= R; j += i)
            isPrime[j - L] = false;
    if (L == 1)
        isPrime[0] = false;
    return isPrime;
}

*/


int sum[N];
vector<int>ansx;


int32_t main(){
    IOS
 
 //SieveOfEratosthenes();

 //cout<<"test"<<endl;

 
  int t;
  //cin>>t;
   t=1;
 while(t--){
    
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    int x= a*c;
    x=max(a*d,x);
    x=max(b*c,x);
    x=max(b*d,x);
    cout<<x<<endl;
  }

}
 
 
 
  
 
 
 
 
  
 
 
 
  
 
 
 

Measured memory_bytes: 3644