/***********************/
// the_authur : helolololololololo // 
/***********************/

#include <bits/stdc++.h>
using namespace std;
namespace IO{
    void setIn(string s) {freopen(s.c_str(), "r", stdin);}
    void setOut(string s) {freopen(s.c_str(), "w", stdout);}
    void setIO(string s = ""){
        ios_base::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
        #ifndef ONLINE_JUDGE
            cin.exceptions(cin.failbit);
        #endif // ONLINE_JUDGE
        if (s.size()){
            setIn(s+".inp");
            setOut(s+".out");
        } else{
            #ifndef ONLINE_JUDGE
                freopen("input.txt", "r", stdin);
            #endif // ONLINE_JUDGE
        }
    }
}
using namespace IO;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<string> vs;
typedef vector<pii> vii;
typedef vector<vi> vvi;
typedef map<int,int> mpii;
typedef set<int> si;
typedef multiset<int> msi;
typedef long long ll;

#define pb push_back
#define pf push_front
#define ppb() pop_back()
#define ppf() pop_front()
#define pp pop
#define pll pair<ll,ll>
#define FOR(i, j, k, in) for (int i = j ; i<k ; i+=in)
#define IFOR(i, j, k, in) for (int i = j ; i<=k ; i+=in)
#define DFOR(i, j, k, in) for (int i=j ; i>=k ; i-=in)
#define RDFOR(i, j, k, in) for (int i=j ; i>k ; i-=in)
#define IREF(i, j) FOR(i, 0, j, 1)
#define DREF(i, j) DFOR(i, j, 0, 1)
#define vt vector
#define all(a) a.begin(), a.end()
#define memset(a,x) memset(a,x, sizeof(a))
#define sz size
#define For(a,v) for(auto &a : v)
#define db double
#define eol '\n'
 
namespace Function{
    template <typename T1, typename T2> void amax(T1 &a, T2 b){
        assert(!(typeid(a).name() == typeid(int).name() && typeid(b).name() == typeid(long long).name()));
        if (a < b) a = b;
    }
    template <typename T1, typename T2> void amin(T1 &a, T2 b) {if (a > b) a = b;}
    template <typename T> void compress(T &a){
        sort(a.begin(), a.end());
        a.resize(unique(a.begin(), a.end()) - a.begin());
    }
    template <typename T> long long sqr(T x) {return 1LL*x*x;}
    template <typename T1, typename T2> long long gcd(T1 a, T2 b) {return (b == 0 ? a : gcd(b, a%b));}
    template <typename T1, typename T2> long long lcm(T1 a, T2 b) {return 1LL*a/gcd(a, b)*b;}
}
 
using namespace Function;
 
namespace Output{
    void print(int x) {cout << x << "\n";}
    void print(unsigned int x) {cout << x << "\n";}
    void print(long unsigned int x) {cout << x << "\n";}
    void print(long long x) {cout << x << "\n";}
    void print(unsigned long long x) {cout << x << "\n";}
    void print(float x) {cout << x << "\n";}
    void print(double x) {cout << x << "\n";}
    void print(long double x) {cout << x << "\n";}
    void print(char x) {cout << x << "\n";}
    void print(char* x) {cout << x << "\n";}
    void print(unsigned char x) {cout << x << "\n";}
    void print(const char* x) {cout << x << "\n";}
    void print(string x) {cout << x << "\n";}
    void print(bool x) {cout << x << "\n";}
 
    template <class T, class... Ts> void print(T t, Ts... ts){
        cout << t << " ";
        print(ts...);
    }
 
    template <typename T1, typename T2> void print(pair <T1, T2> a) {print(a.first, a.second);}
    template <typename T> void print(T a){
        for(auto it : a){
            print(it);
        }
    }
 
    template <class T, class... Ts> void prine(T t, Ts... ts){
        print(t, ts...);
        exit(0);
    }
}
 
using namespace Output;
 
//#define name ""
//#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
//#define inout  freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout);

const db pi = acos(-1.00);
const db eps = 1e-6;
const int INF = 1e9;
const int MOD = 1e9+7;
const int dx[4] = {0, 0, -1, 1};
const int dy[4] = {-1, 1, 0, 0};
const int N = 1e5+5;
int n,k;
//~ void Enter() {
	//~ cin >> n>>k;
//}

int lcs(string &a, string &b) {
    int n = a.size(), m = b.size();
    vector< int> dp(m+1,0),pre(m+1,0);
    for (int i=1; i<=n; i++) {
        for (int j=1; j<=m; j++) {
        if (a[i-1] == b[j-1]) dp[j] = pre[j-1] + 1;
        else dp[j] = max(dp[j-1], pre[j]);
    }
    swap(pre,dp);
    }
    swap(pre,dp);
    return dp[m];
}
 
int Solve() {
	int n;
	cin >> n;
	int x = (n == 1) ? 0 : 1;
	print(x);
}


int main() {
   ll  a,b,c,d;
   cin >> a >> b >> c >> d;
   ll  ans=max(a*c,max(a*d,max(b*c,b*d)));
   print(ans);
    return 0;
}
 



Measured memory_bytes: 3592