//BISMILLAHIR RAHMANIR RAHIM
#include<bits/stdc++.h>
using namespace std;

typedef long long int ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int,int> pii;
typedef pair < int , pii > piii;
typedef pair<double, int > pdi;
typedef pair<ll, ll> pll;
typedef vector<pii> vii;
typedef vector<pll> vll;
typedef pair < ll , pll > plll;
typedef pair < pll , pll > pllll;

#define all(v) (v).begin(), (v).end()
#define KeepUnique(v) (v).erase( unique(all(v)), v.end() )
#define PB push_back
#define F first
#define S second
#define MP make_pair
#define endl '\n'
#define mx 100005
#define mx1 100005
#define mx2 200005
#define mx3 300005
#define WHITE 0
#define RED 1
#define BLACK 2

#define bp __builtin_popcountll
#define fraction() cout.unsetf(ios::floatfield); cout.precision(14); cout.setf(ios::fixed,ios::floatfield);
#define hi cout<<"Dhukse " << endl;
#define si(x) scanf("%d",&x)
#define sii(x,y) scanf("%d %d",&x,&y)
#define siii(x,y,z) scanf("%d %d %d",&x,&y,&z)
#define sl(x) scanf("%lld",&x)
#define sll(x,y) scanf("%lld %lld",&x,&y)
#define slll(x,y,z) scanf("%lld %lld %lld",&x,&y,&z)

const double PI = acos(-1);
const double eps = 1e-12;
const int inf = 2000000000;
const ll infLL = (ll)2e18;
ll MOD = 1000000007;
int MOD1 = 1000000007;
int MOD2 = 1000000009;
#define harmonic(n) 0.57721566490153286l(Eulers-Mascharoni constant)+log(n) ( 1/1 + 1/2 + .... + 1/n );

#define mem(a,b) memset(a, b, sizeof(a) )
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a) * (a))
#define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

typedef vector<int>::iterator vit;
typedef set<int>::iterator sit;

inline bool checkBit(ll n, ll i) { return n&(1LL<<i); }
inline ll setBit(ll n, ll i) { return n|(1LL<<i);; }
inline ll resetBit(ll n, ll i) { return n&(~(1LL<<i)); }
#define bp __builtin_popcount

int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
//int dx[] = {+1, 0, -1, 0, +1, +1, -1, -1};
//int dy[] = {0, +1, 0, -1, +1, -1, +1, -1};

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
inline bool isLeapYear(ll year) { return (year%400==0) || (year%4==0 && year%100!=0); }
inline void normal(ll &a) { a %= MOD; (a < 0) && (a += MOD); }
inline ll modMul(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a*b)%MOD; }
inline ll modAdd(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a+b)%MOD; }
inline ll modSub(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); a -= b; normal(a); return a; }
inline ll modPow(ll b, ll p) { ll r = 1LL; while(p) { if(p&1) r = modMul(r, b); b = modMul(b, b); p >>= 1LL; } return r; }
inline ll modDiv(ll a, ll b) { return modMul(a, modPow(b, MOD-2)); }

bool comp( const pair < ll , pll > &p1 , const pair < ll , pll > &p2 ){ return p1.F > p2.F ;}
bool comp1( const pll &p1 , const pll &p2 ){
          if( p1.F == p2.F ){
                 return p1.S > p2.S;
          }
          return p1.F < p2.F ;
}
ll converter( string a ){
    ll i , mul = 1 , r , t ,ans = 0LL;if( a.length() == 0 )return 0;for( i = a.length() - 1 ; i >= 0 ; i-- ){
        t = a[i] - '0';r = t%10;ans += (mul*r);mul = mul*10;
    }
    return ans;
}
int msb(unsigned x) {
	union { double a; int b[2]; };
	a = x;
	return (b[1] >> 20) - 1023;
}

//
//debug
#ifdef RIP
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) {
            return os << "(" << p.first << ", " << p.second << ")";
}

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) {
            os << "{";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "}";
}

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename T >
ostream &operator << ( ostream & os, const multiset< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << it -> first << " = " << it -> second ;
                                            }
                    return os << "]";
}

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

void faltu () {
            cerr << endl;
}

template <typename T>
void faltu( T a[], int n ) {
            for(int i = 0; i < n; ++i) cerr << a[i] << ' ';
                cerr << endl;
}

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) {
            cerr << arg << ' ';
                faltu(rest...);
}
#else
#define dbg(args...)
#endif  //RIP
const int MAX=  300005;
unsigned long long int dp1[MAX] ;
pair < ll , ll > a[MAX];
vector < pll > store;
ll sum[MAX];
int main() {
    optimize();
    //fraction();
    //freopen("input.txt","r",stdin);
   ll n , i , x ,k;
   cin >> n ;
   unsigned long long int mini = (ll)1.5e19;
   ll idx ;
   for(i = 1 ; i <= n; ++i) {
        cin >>a[i].F;
        a[i].S = i;
   }
   cin >> k;

   sort(a + 1 , a + n + 1);

   for(i= 1 ; i <= n; ++i) {
        sum[i] = sum[i-1] + a[i].F;
   }

   a[0].F = a[1].F;
   a[n+1].F = a[n].F;
   for( i = 1 ; i <= n; ++i ){
         if( i >= k ){
           dp1[i] = dp1[i-1] + (a[i].F*(k)) - ( sum[i] - sum[i-k] );
         }
         else dp1[i] = dp1[i-1] + ( a[i].F*i) - sum[i];
         if( i >= k  ){
            if( mini > dp1[i] ) mini = dp1[i] , idx = i;
            ll cur = ( sum[i] - sum[i-k+1] ) - (a[i-k+1].F )*(k-1);
            dp1[i] -= cur;
         }
   }
   for(i = idx ; i > idx - k ; --i )cout << a[i].S << " ";

    return 0;

}


//BISMILLAHIR RAHMANIR RAHIM
#include<bits/stdc++.h>
using namespace std;

typedef long long int ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int,int> pii;
typedef pair < int , pii > piii;
typedef pair<double, int > pdi;
typedef pair<ll, ll> pll;
typedef vector<pii> vii;
typedef vector<pll> vll;
typedef pair < ll , pll > plll;
typedef pair < pll , pll > pllll;

#define all(v) (v).begin(), (v).end()
#define KeepUnique(v) (v).erase( unique(all(v)), v.end() )
#define PB push_back
#define F first
#define S second
#define MP make_pair
#define endl '\n'
#define mx 100005
#define mx1 100005
#define mx2 200005
#define mx3 300005
#define WHITE 0
#define RED 1
#define BLACK 2

#define bp __builtin_popcountll
#define fraction() cout.unsetf(ios::floatfield); cout.precision(14); cout.setf(ios::fixed,ios::floatfield);
#define hi cout<<"Dhukse " << endl;
#define si(x) scanf("%d",&x)
#define sii(x,y) scanf("%d %d",&x,&y)
#define siii(x,y,z) scanf("%d %d %d",&x,&y,&z)
#define sl(x) scanf("%lld",&x)
#define sll(x,y) scanf("%lld %lld",&x,&y)
#define slll(x,y,z) scanf("%lld %lld %lld",&x,&y,&z)

const double PI = acos(-1);
const double eps = 1e-12;
const int inf = 2000000000;
const ll infLL = (ll)2e18;
ll MOD = 1000000007;
int MOD1 = 1000000007;
int MOD2 = 1000000009;
#define harmonic(n) 0.57721566490153286l(Eulers-Mascharoni constant)+log(n) ( 1/1 + 1/2 + .... + 1/n );

#define mem(a,b) memset(a, b, sizeof(a) )
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a) * (a))
#define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

typedef vector<int>::iterator vit;
typedef set<int>::iterator sit;

inline bool checkBit(ll n, ll i) { return n&(1LL<<i); }
inline ll setBit(ll n, ll i) { return n|(1LL<<i);; }
inline ll resetBit(ll n, ll i) { return n&(~(1LL<<i)); }
#define bp __builtin_popcount

int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
//int dx[] = {+1, 0, -1, 0, +1, +1, -1, -1};
//int dy[] = {0, +1, 0, -1, +1, -1, +1, -1};

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
inline bool isLeapYear(ll year) { return (year%400==0) || (year%4==0 && year%100!=0); }
inline void normal(ll &a) { a %= MOD; (a < 0) && (a += MOD); }
inline ll modMul(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a*b)%MOD; }
inline ll modAdd(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a+b)%MOD; }
inline ll modSub(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); a -= b; normal(a); return a; }
inline ll modPow(ll b, ll p) { ll r = 1LL; while(p) { if(p&1) r = modMul(r, b); b = modMul(b, b); p >>= 1LL; } return r; }
inline ll modDiv(ll a, ll b) { return modMul(a, modPow(b, MOD-2)); }

bool comp( const pair < ll , pll > &p1 , const pair < ll , pll > &p2 ){ return p1.F > p2.F ;}
bool comp1( const pll &p1 , const pll &p2 ){
          if( p1.F == p2.F ){
                 return p1.S > p2.S;
          }
          return p1.F < p2.F ;
}
ll converter( string a ){
    ll i , mul = 1 , r , t ,ans = 0LL;if( a.length() == 0 )return 0;for( i = a.length() - 1 ; i >= 0 ; i-- ){
        t = a[i] - '0';r = t%10;ans += (mul*r);mul = mul*10;
    }
    return ans;
}
int msb(unsigned x) {
	union { double a; int b[2]; };
	a = x;
	return (b[1] >> 20) - 1023;
}

//
//debug
#ifdef RIP
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) {
            return os << "(" << p.first << ", " << p.second << ")";
}

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) {
            os << "{";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "}";
}

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename T >
ostream &operator << ( ostream & os, const multiset< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << it -> first << " = " << it -> second ;
                                            }
                    return os << "]";
}

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

void faltu () {
            cerr << endl;
}

template <typename T>
void faltu( T a[], int n ) {
            for(int i = 0; i < n; ++i) cerr << a[i] << ' ';
                cerr << endl;
}

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) {
            cerr << arg << ' ';
                faltu(rest...);
}
#else
#define dbg(args...)
#endif  //RIP

const int MAX=  300005;
ll dp1[MAX] , dp2[MAX] ,a[MAX];
vector < pll > store;
int main() {
    optimize();
    //fraction();
   // freopen("input.txt","r",stdin);
   int n , i , x ,k;
   cin >> n ;
   for(i = 1 ; i <= n; ++i) cin >>a[i];
   cin >> k;

   sort(a + 1 , a + n + 1);
   a[0] = a[1];
   a[n+1] = a[n];

   for( i = 1 ; i <= n; ++i ){
         dp1[i] = dp1[i-1] + (a[i] - a[i-1])*(i-1);
   }
   for( i = n ; i >= 1 ; --i ){
         dp2[i] = dp2[i+1] + ( a[i+1] - a[i])*(n-i);
   }
   for( i = 1 ; i<= n; ++i){
        dbg( i , dp1[i] + dp2[i] );
    store.PB(pll(dp1[i] + dp2[i] , i));
   }
   sort(all(store));

   for(i = 0 ; i < k; ++i){
    cout << store[i].S << " " ;
   }

    return 0;

}


//BISMILLAHIR RAHMANIR RAHIM
#include<bits/stdc++.h>
using namespace std;

typedef long long int ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int,int> pii;
typedef pair < int , pii > piii;
typedef pair<double, int > pdi;
typedef pair<ll, ll> pll;
typedef vector<pii> vii;
typedef vector<pll> vll;
typedef pair < ll , pll > plll;
typedef pair < pll , pll > pllll;

#define all(v) (v).begin(), (v).end()
#define KeepUnique(v) (v).erase( unique(all(v)), v.end() )
#define PB push_back
#define F first
#define S second
#define MP make_pair
#define endl '\n'
#define mx 100005
#define mx1 100005
#define mx2 200005
#define mx3 300005
#define WHITE 0
#define RED 1
#define BLACK 2

#define bp __builtin_popcountll
#define fraction() cout.unsetf(ios::floatfield); cout.precision(14); cout.setf(ios::fixed,ios::floatfield);
#define hi cout<<"Dhukse " << endl;
#define si(x) scanf("%d",&x)
#define sii(x,y) scanf("%d %d",&x,&y)
#define siii(x,y,z) scanf("%d %d %d",&x,&y,&z)
#define sl(x) scanf("%lld",&x)
#define sll(x,y) scanf("%lld %lld",&x,&y)
#define slll(x,y,z) scanf("%lld %lld %lld",&x,&y,&z)

const double PI = acos(-1);
const double eps = 1e-12;
const int inf = 2000000000;
const ll infLL = (ll)2e18;
ll MOD = 1000000007;
int MOD1 = 1000000007;
int MOD2 = 1000000009;
#define harmonic(n) 0.57721566490153286l(Eulers-Mascharoni constant)+log(n) ( 1/1 + 1/2 + .... + 1/n );

#define mem(a,b) memset(a, b, sizeof(a) )
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a) * (a))
#define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

typedef vector<int>::iterator vit;
typedef set<int>::iterator sit;

inline bool checkBit(ll n, ll i) { return n&(1LL<<i); }
inline ll setBit(ll n, ll i) { return n|(1LL<<i);; }
inline ll resetBit(ll n, ll i) { return n&(~(1LL<<i)); }
#define bp __builtin_popcount

int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
//int dx[] = {+1, 0, -1, 0, +1, +1, -1, -1};
//int dy[] = {0, +1, 0, -1, +1, -1, +1, -1};

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
inline bool isLeapYear(ll year) { return (year%400==0) || (year%4==0 && year%100!=0); }
inline void normal(ll &a) { a %= MOD; (a < 0) && (a += MOD); }
inline ll modMul(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a*b)%MOD; }
inline ll modAdd(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a+b)%MOD; }
inline ll modSub(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); a -= b; normal(a); return a; }
inline ll modPow(ll b, ll p) { ll r = 1LL; while(p) { if(p&1) r = modMul(r, b); b = modMul(b, b); p >>= 1LL; } return r; }
inline ll modDiv(ll a, ll b) { return modMul(a, modPow(b, MOD-2)); }

bool comp( const pair < ll , pll > &p1 , const pair < ll , pll > &p2 ){ return p1.F > p2.F ;}
bool comp1( const pll &p1 , const pll &p2 ){
          if( p1.F == p2.F ){
                 return p1.S > p2.S;
          }
          return p1.F < p2.F ;
}
ll converter( string a ){
    ll i , mul = 1 , r , t ,ans = 0LL;if( a.length() == 0 )return 0;for( i = a.length() - 1 ; i >= 0 ; i-- ){
        t = a[i] - '0';r = t%10;ans += (mul*r);mul = mul*10;
    }
    return ans;
}
int msb(unsigned x) {
	union { double a; int b[2]; };
	a = x;
	return (b[1] >> 20) - 1023;
}

//
//debug
#ifdef RIP
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) {
            return os << "(" << p.first << ", " << p.second << ")";
}

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) {
            os << "{";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "}";
}

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename T >
ostream &operator << ( ostream & os, const multiset< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << it -> first << " = " << it -> second ;
                                            }
                    return os << "]";
}

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

void faltu () {
            cerr << endl;
}

template <typename T>
void faltu( T a[], int n ) {
            for(int i = 0; i < n; ++i) cerr << a[i] << ' ';
                cerr << endl;
}

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) {
            cerr << arg << ' ';
                faltu(rest...);
}
#else
#define dbg(args...)
#endif  //RIP
const int MAX=  300005;
ll dp1[MAX] ;
pair < ll , ll > a[MAX];
vector < pll > store;
unsigned long long int sum[MAX];
int main() {
    optimize();
    //fraction();
    //freopen("input.txt","r",stdin);
   int n , i , x ,k;
   cin >> n ;
   unsigned long long int mini = (unsigned long long int )1.5e19;
   ll idx ;
   for(i = 1 ; i <= n; ++i) {
        cin >>a[i].F;
        a[i].S = i;
        sum[i] = sum[i-1] + a[i].F;
   }
   cin >> k;

   sort(a + 1 , a + n + 1);
   a[0].F = a[1].F;
   a[n+1].F = a[n].F;
   int ptr = 0;
   for( i = 1 ; i <= n; ++i ){
         dp1[i] = dp1[i-1] + (a[i].F - a[i-1].F)*(k-1);
         if( i >= k  ){
            if( mini > dp1[i] ) mini = dp1[i] , idx = i;
            ll cur = ( sum[i] - sum[ptr] ) - (a[ptr].F )*(k-1);
            dp1[i] -= cur;
            ++ptr;
         }
   }
   for(i = idx ; i > idx - k ; --i )cout << a[i].S << " ";

    return 0;

}


#pragma comment(linker, "/STACK:500000000")
#include <functional>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <sstream>
#include <ctype.h>
#include <stdio.h>
#include <bitset>
#include <vector>
#include <string>
#include <math.h>
#include <time.h>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>
#define Int long long
#define INF 0x3F3F3F3F
#define eps 1e-9
using namespace std;

#define N 300009
int size;

struct FenwickTreeSum
{
    Int t[N];

    Int Sum(int L, int R) {
        return Sum(R) - Sum(L - 1);
    }
    Int Sum(int right) {
        Int result = 0;
        for(; right >= 0; right = (right & (right + 1)) - 1)
            result += t[right];
        return result;
    }
    void Add(int idx, Int delta) {
        for (; idx < size; idx |= idx + 1)
            t[idx] += delta;
    }
};

pair<int, int> A[N];
FenwickTreeSum tree;

int main()
{
    int i, k;
    scanf("%d", &size);
    for(i = 0; i < size; i++)
    {
        scanf("%d", &A[i].first);
        A[i].second = i + 1;
    }
    scanf("%d", &k);
    sort(A, A + size);
    for(i = 0; i < size; i++)
        tree.Add(i, A[i].first);
    Int sum = 0;
    Int minV = 1ll << 62ll;
    int pos;
    for(i = 0; i < size; i++)
    {
        int len = min(k - 1, i);
        sum += (Int)A[i].first * len - tree.Sum(i - len, i - 1);
        if (i - k >= 0)
        {
            sum -= tree.Sum(i - k + 1, i - 1) - (Int)A[i - k].first * len;
        }
        if (i + 1 >= k && minV > sum)
        {
            minV = sum;
            pos = i;
        }
    }
    for(int i = pos; k--; i--)
        printf("%d ", A[i].second);
    puts("");
}

/*
4
2 3 4 5
3
*/


#pragma comment(linker, "/STACK:500000000")
#include <functional>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <sstream>
#include <ctype.h>
#include <stdio.h>
#include <bitset>
#include <vector>
#include <string>
#include <math.h>
#include <time.h>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>
#define Int long long
#define INF 0x3F3F3F3F
#define eps 1e-9
using namespace std;

#define N 300009
int size;

struct FenwickTreeSum
{
    Int t[N];

    Int Sum(int L, int R) {
        return Sum(R) - Sum(L - 1);
    }
    Int Sum(int right) {
        Int result = 0;
        for(; right >= 0; right = (right & (right + 1)) - 1)
            result += t[right];
        return result;
    }
    void Add(int idx, Int delta) {
        for (; idx < size; idx |= idx + 1)
            t[idx] += delta;
    }
};

pair<int, int> A[N];
FenwickTreeSum tree;

int main()
{
    int i, k;
    scanf("%d", &size);
    for(i = 0; i < size; i++)
    {
        scanf("%d", &A[i].first);
        A[i].second = i + 1;
        tree.Add(i, A[i].first);
    }
    scanf("%d", &k);
    sort(A, A + size);
    Int sum = 0;
    Int minV = 1ll << 62ll;
    int pos;
    for(i = 0; i < size; i++)
    {
        int len = min(k - 1, i);
        sum += A[i].first * len - tree.Sum(i - len, i - 1);
        if (i - k >= 0)
        {
            sum -= tree.Sum(i - k + 1, i - 1) - A[i - k].first * len;
        }
        if (i + 1 >= k && minV > sum)
        {
            minV = sum;
            pos = i;
        }
    }
    for(int i = pos; k--; i--)
        printf("%d ", A[i].second);
    puts("");
}


#include<stdio.h>
#include<iostream>
#include<string.h>
#include<ctype.h>
#include<math.h>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<functional>
#include<string>
#include<algorithm>
#include<time.h>
void fre(){freopen("c://test//input.in","r",stdin);freopen("c://test//output.out","w",stdout);}
template <class T> inline void scand(T &x){char c;x=0;while((c=getchar())<'0');while(c>='0'&&c<='9')x=x*10+(c-48),c=getchar();}
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,y,sizeof(x))
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned int UI;
typedef int Int;
template <class T> inline void gmax(T &a,T b){if(b>a)a=b;}
template <class T> inline void gmin(T &a,T b){if(b<a)a=b;}
using namespace std;
const int N=0,M=0,L=0,Z=1e9+7,t30=1<<30,maxint=2147483647,ms31=522133279,ms63=1061109567,ms127=2139062143;
const double eps=1e-10,PI=acos(-1.0);//.0
map<int,int>mop;
int casenum,casei,inf;
int n;
double A,B,C,D,a,b,c,d;
double ta,tb,tc,td,tx,ty;
double x,y,ans;
double l,r,m;
int i,j,u,v;
bool same(double x,double y)
{
	return fabs(x-y)<eps;
}
int main()
{
	while(~scanf("%lf%lf%lf%lf",&A,&B,&C,&D))
	{
		a=A;
		b=B;
		c=C;
		d=D;
		x=a*d;
		y=b*c;
		if(same(x,y))ans=0;
		else
		{
			ans=1e9;
			for(i=-1;i<=1;i+=2)
			{
				for(j=-1;j<=1;j+=2)
				{
					for(u=-1;u<=1;u+=2)
					{
						for(v=-1;v<=1;v+=2)
						{
							if(i==-1&&j==1&&u==-1&&v==1)
							{
								int pause=0;
							}
							x=a*d;
							y=b*c;
							l=0;
							r=max(min(fabs(A),fabs(D)),min(fabs(B),fabs(C)));
							while(!same(x,y))
							{
								m=(l+r)/2;
								ta=a+i*m;
								tb=b+j*m;
								tc=c+u*m;
								td=d+v*m;
								tx=ta*td;
								ty=tb*tc;
								if(x>y&&tx<ty||x<y&&tx>ty)//过头了
								{
									r=m;
								}
								else if(fabs(tx-ty)>fabs(x-y))
								{
									r=m;
								}
								else
								{
									l=m;
									x=tx;
									y=ty;
								}
								if(same(l,r))break;
							}
							if(fabs(x-y)<1e-6)gmin(ans,l);
						}
					}
				}
			}
		}
		printf("%.10f\n",ans);
	}
	return 0;
}
/*
【题意】

【类型】

【分析】

【优化】

【trick】

【数据】

*/


#include<stdio.h>
#include<iostream>
#include<string.h>
#include<ctype.h>
#include<math.h>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<functional>
#include<string>
#include<algorithm>
#include<time.h>
void fre(){freopen("c://test//input.in","r",stdin);freopen("c://test//output.out","w",stdout);}
template <class T> inline void scand(T &x){char c;x=0;while((c=getchar())<'0');while(c>='0'&&c<='9')x=x*10+(c-48),c=getchar();}
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,y,sizeof(x))
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned int UI;
typedef int Int;
template <class T> inline void gmax(T &a,T b){if(b>a)a=b;}
template <class T> inline void gmin(T &a,T b){if(b<a)a=b;}
using namespace std;
const int N=0,M=0,L=0,Z=1e9+7,t30=1<<30,maxint=2147483647,ms31=522133279,ms63=1061109567,ms127=2139062143;
const double eps=1e-9,PI=acos(-1.0);//.0
map<int,int>mop;
int casenum,casei,inf;
int n;
double A,B,C,D,a,b,c,d;
double ta,tb,tc,td,tx,ty;
double x,y,ans;
double l,r,m;
int i,j,u,v;
bool same(double x,double y)
{
    return fabs(x-y)<eps;
}
int main()
{
    while(~scanf("%lf%lf%lf%lf",&A,&B,&C,&D))
    {
        a=A;
        b=B;
        c=C;
        d=D;
        x=a*d;
        y=b*c;
        if(same(x,y))ans=0;
        else
        {
            ans=1e9;
            for(i=-1;i<=1;i+=2)
            {
                for(j=-1;j<=1;j+=2)
                {
                    for(u=-1;u<=1;u+=2)
                    {
                        for(v=-1;v<=1;v+=2)
                        {
                            if(i==-1&&j==1&&u==-1&&v==1)
                            {
                                int pause=0;
                            }
                            x=a*d;
                            y=b*c;
                            l=0;
                            r=max(min(fabs(A),fabs(D)),min(fabs(B),fabs(C)));
                            while(!same(x,y))
                            {
                                m=(l+r)/2;
                                ta=a+i*m;
                                tb=b+j*m;
                                tc=c+u*m;
                                td=d+v*m;
                                tx=ta*td;
                                ty=tb*tc;
                                if(x>y&&tx<ty||x<y&&tx>ty)//过头了
                                {
                                    r=m;
                                }
                                else if(fabs(tx-ty)>fabs(x-y))
                                {
                                    r=m;
                                }
                                else
                                {
                                    l=m;
                                    x=tx;
                                    y=ty;
                                }
                                if(same(l,r))break;
                            }
                            if(fabs(x-y)<1e-3)gmin(ans,l);
                        }
                    }
                }
            }
        }
        printf("%.10f\n",ans);
    }
    return 0;
}
/*
【题意】

【类型】

【分析】

【优化】

【trick】

【数据】

*/


#include<stdio.h>
#include<iostream>
#include<string.h>
#include<ctype.h>
#include<math.h>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<functional>
#include<string>
#include<algorithm>
#include<time.h>
void fre(){freopen("c://test//input.in","r",stdin);freopen("c://test//output.out","w",stdout);}
template <class T> inline void scand(T &x){char c;x=0;while((c=getchar())<'0');while(c>='0'&&c<='9')x=x*10+(c-48),c=getchar();}
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,y,sizeof(x))
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned int UI;
typedef int Int;
template <class T> inline void gmax(T &a,T b){if(b>a)a=b;}
template <class T> inline void gmin(T &a,T b){if(b<a)a=b;}
using namespace std;
const int N=0,M=0,L=0,Z=1e9+7,t30=1<<30,maxint=2147483647,ms31=522133279,ms63=1061109567,ms127=2139062143;
const double eps=1e-9,PI=acos(-1.0);//.0
map<int,int>mop;
int casenum,casei,inf;
int n;
double A,B,C,D,a,b,c,d;
double ta,tb,tc,td,tx,ty;
double x,y,ans;
double l,r,m;
int i,j,u,v;
bool same(double x,double y)
{
    return fabs(x-y)<eps;
}
int main()
{
    while(~scanf("%lf%lf%lf%lf",&A,&B,&C,&D))
    {
        a=A;
        b=B;
        c=C;
        d=D;
        x=a*d;
        y=b*c;
        if(same(x,y))ans=0;
        else
        {
            ans=1e9;
            for(i=-1;i<=1;i+=2)
            {
                for(j=-1;j<=1;j+=2)
                {
                    for(u=-1;u<=1;u+=2)
                    {
                        for(v=-1;v<=1;v+=2)
                        {
                            if(i==-1&&j==1&&u==-1&&v==1)
                            {
                                int pause=0;
                            }
                            x=a*d;
                            y=b*c;
                            l=0;
                            r=max(min(fabs(A),fabs(D)),min(fabs(B),fabs(C)));
                            while(!same(x,y))
                            {
                                m=(l+r)/2;
                                ta=a+i*m;
                                tb=b+j*m;
                                tc=c+u*m;
                                td=d+v*m;
                                tx=ta*td;
                                ty=tb*tc;
                                if(x>y&&tx<ty||x<y&&tx>ty)//过头了
                                {
                                    r=m;
                                }
                                else if(fabs(tx-ty)>fabs(x-y))
                                {
                                    r=m;
                                }
                                else
                                {
                                    l=m;
                                    x=tx;
                                    y=ty;
                                }
                                if(same(l,r))break;
                            }
                            if(fabs(x-y)<1e-1)gmin(ans,l);
                        }
                    }
                }
            }
        }
        printf("%.10f\n",ans);
    }
    return 0;
}
/*
【题意】

【类型】

【分析】

【优化】

【trick】

【数据】
123

*/


#include<stdio.h>
#include<iostream>
#include<string.h>
#include<ctype.h>
#include<math.h>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<functional>
#include<string>
#include<algorithm>
#include<time.h>
void fre(){freopen("c://test//input.in","r",stdin);freopen("c://test//output.out","w",stdout);}
template <class T> inline void scand(T &x){char c;x=0;while((c=getchar())<'0');while(c>='0'&&c<='9')x=x*10+(c-48),c=getchar();}
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,y,sizeof(x))
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned int UI;
typedef int Int;
template <class T> inline void gmax(T &a,T b){if(b>a)a=b;}
template <class T> inline void gmin(T &a,T b){if(b<a)a=b;}
using namespace std;
const int N=0,M=0,L=0,Z=1e9+7,t30=1<<30,maxint=2147483647,ms31=522133279,ms63=1061109567,ms127=2139062143;
const double eps=1e-10,PI=acos(-1.0);//.0
map<int,int>mop;
int casenum,casei,inf;
int n;
double A,B,C,D,a,b,c,d;
double ta,tb,tc,td,tx,ty;
double x,y,ans;
double l,r,m;
int i,j,u,v;
bool same(double x,double y)
{
    return fabs(x-y)<eps;
}
int main()
{
    while(~scanf("%lf%lf%lf%lf",&A,&B,&C,&D))
    {
        a=A;
        b=B;
        c=C;
        d=D;
        x=a*d;
        y=b*c;
        if(same(x,y))ans=0;
        else
        {
            ans=1e9;
            for(i=-1;i<=1;i+=2)
            {
                for(j=-1;j<=1;j+=2)
                {
                    for(u=-1;u<=1;u+=2)
                    {
                        for(v=-1;v<=1;v+=2)
                        {
                            if(i==1&&j==-1&&u==-1&&v==1)
                            {
                                int pause=0;
                            }
                            x=a*d;
                            y=b*c;
                            l=0;
                            r=max(min(abs(A),abs(D)),min(abs(B),abs(C)));
                            while(!same(x,y))
                            {
                                m=(l+r)/2;
                                ta=a+i*m;
                                tb=b+j*m;
                                tc=c+u*m;
                                td=d+v*m;
                                tx=ta*td;
                                ty=tb*tc;
                                if(x>y&&tx<ty||x<y&&tx>ty)//过头了
                                {
                                    r=m;
                                }
                                else if(fabs(tx-ty)>fabs(x-y))
                                {
                                    r=m;
                                }
                                else
                                {
                                    l=m;
                                    x=tx;
                                    y=ty;
                                }
                                if(same(l,r))break;
                            }
                            if(fabs(x-y)<1e-8)gmin(ans,l);
                        }
                    }
                }
            }
        }
        printf("%.10f\n",ans);
    }
    return 0;
}
/*
【题意】

【类型】

【分析】

【优化】

【trick】

【数据】

*/


#include <iostream>
#include <cstdio>
using namespace std;
long long a,b,c,d;
double res;
bool z(double a , double b, double c , double d){
   if ((a*d + 0.0000000001  > b*c) && (b*c + 0.0000000001 > a*d)) {
      return false;
   }
   return true;
}
int main() {
   scanf("%lld %lld %lld %lld", &a,&b,&c,&d);
   if (((a*d > 0)&&(b*c<0)) || ((a*d < 0) && (b*c > 0))) {
      a = abs(a), b=abs(b), c=abs(c), d=abs(d);
      long long m= a,n=0;
      if (b < m) m = b , n=1;
      if (c < m) m = c , n=2;
      if (d < m) m = d , n=3;
      if (n==0) {
         a = 0;
         d += m;
         b -= m;
         c -= m;
      }
      else if(n==1){
         b = 0;
         c += m;
         a -= m;
         d -= m;
      }
      else if (n==2){
         c = 0;
         b += m;
         a -= m;
         d -= m;
      }
      else if (n==3){
         d = 0;
         a += m;
         b -= m;
         c -= m;
      }
      res += m;
   }
   if (a*d < b*c) {
      swap(a, b);
      swap(c, d);
   }
   if (a<d) swap(a,d);
   if (b<c) swap(b, c);
   double m=0, n=d;
   double k = (m+n)/2;
   while (z(a-k, b+k, c+k, d-k)){
      if ((a-k)*(d-k) > (b+k)*(c+k)) m = k;
      else n = k;
      k = (m+n)/2;
      if (n-m<0.0000000001) break;
   }
   printf("%.9lf", res+k);
   return 0;
}


#include <iostream>
#include <cstdio>
#define abs(x) (x>0?x:-x)
using namespace std;
long long a,b,c,d;
double res;
bool z(double a , double b, double c , double d){
   if ((a*d + 0.000000001  > b*c) && (b*c + 0.000000001 > a*d)) {
      return false;
   }
   return true;
}
int main() {
   scanf("%lld %lld %lld %lld", &a,&b,&c,&d);
   if (((a*d > 0)&&(b*c<0)) || ((a*d < 0) && (b*c > 0))) {
      a = abs(a), b=abs(b), c=abs(c), d=abs(d);
      long long m= a,n=0;
      if (b < m) m = b , n=1;
      if (c < m) m = c , n=2;
      if (d < m) m = d , n=3;
      a -= m;
      b -= m;
      c -= m;
      d -= m;
      if (n==0) d += 2*m;
      else if(n==1) c += 2*m;
      else if (n==2) b += 2*m;
      else if (n==3) a += 2*m;
      res += m;
   }
   if (a*d == b*c) {
      printf("%.9lf", res);
      return 0;
   }
   if (a*d < b*c) {
      swap(a, b);
      swap(c, d);
   }
   if (a<d) swap(a,d);
   if (b<c) swap(b, c);

   double m=0, n=d;
   double k = (m+n)/2;
   while (z(a-k, b+k, c+k, d-k)){
      if ((a-k)*(d-k) > (b+k)*(c+k)) m = k;
      else n = k;
      k = (m+n)/2;
      if (n-m<0.000000001) break;
   }
   printf("%.9lf", res+k);
   return 0;
}


#include <iostream>
#include <cstdio>
#define abs(x) (x>0?x:-x)
using namespace std;
long long a,b,c,d;
double res;
int main() {
   scanf("%lld %lld %lld %lld", &a,&b,&c,&d);
   if (((a*d > 0)&&(b*c<0)) || ((a*d < 0) && (b*c > 0))) {
      a = abs(a), b=abs(b), c=abs(c), d=abs(d);
      long long m= a,n=0;
      if (b < m) m = b , n=1;
      if (c < m) m = c , n=2;
      if (d < m) m = d , n=3;
      a -= m;
      b -= m;
      c -= m;
      d -= m;
      if (n==0) d += 2*m;
      else if(n==1) c += 2*m;
      else if (n==2) b += 2*m;
      else if (n==3) a += 2*m;
      res += m;
   }

   if (a*d < b*c) {
      swap(a, b);
      swap(c, d);
   }
   if (a<d) swap(a,d);
   if (b<c) swap(b, c);

   long long w = a*d - b*c;
   long long w2 = a+b+c+d;
   double w3 = ((double)(w))/w2;
   printf("%.9lf", w3+res);
   return 0;
}


#include <iostream>
#include <cstdio>
#define abs(x) (x>0?x:-x)
using namespace std;
long long a,b,c,d;
double res;
bool z(double a , double b, double c , double d){
   if ((a*d + 0.0000000001  > b*c) && (b*c + 0.0000000001 > a*d)) {
      return false;
   }
   return true;
}
int main() {
   scanf("%lld %lld %lld %lld", &a,&b,&c,&d);
   if (((a*d > 0)&&(b*c<0)) || ((a*d < 0) && (b*c > 0))) {
      a = abs(a), b=abs(b), c=abs(c), d=abs(d);
      long long m= a,n=0;
      if (b < m) m = b , n=1;
      if (c < m) m = c , n=2;
      if (d < m) m = d , n=3;
      if (n==0) {
         a = 0;
         d += m;
         b -= m;
         c -= m;
      }
      else if(n==1){
         b = 0;
         c += m;
         a -= m;
         d -= m;
      }
      else if (n==2){
         c = 0;
         b += m;
         a -= m;
         d -= m;
      }
      else if (n==3){
         d = 0;
         a += m;
         b -= m;
         c -= m;
      }
      res += m;
   }
   if (a*d < b*c) {
      swap(a, b);
      swap(c, d);
   }
   if (a<d) swap(a,d);
   if (b<c) swap(b, c);
   double m=0, n=d;
   double k = (m+n)/2;
   while (z(a-k, b+k, c+k, d-k)){
      if ((a-k)*(d-k) > (b+k)*(c+k)) m = k;
      else n = k;
      k = (m+n)/2;
      if (n-m<0.0000000001) break;
   }
   printf("%.9lf", res+k);
   return 0;
}


#include <iostream>
#include <cstdio>
#define abs(x) (x>0?x:-x)
using namespace std;
long long a,b,c,d;
double res;
int main() {
   scanf("%lld %lld %lld %lld", &a,&b,&c,&d);
   if (((a*d > 0)&&(b*c<0)) || ((a*d < 0) && (b*c > 0))) {
      a = abs(a), b=abs(b), c=abs(c), d=abs(d);
      long long m= a,n=0;
      if (b < m) m = b , n=1;
      if (c < m) m = c , n=2;
      if (d < m) m = d , n=3;
      a -= m;
      b -= m;
      c -= m;
      d -= m;
      if (n==0) d += 2*m;
      else if(n==1) c += 2*m;
      else if (n==2) b += 2*m;
      else if (n==3) a += 2*m;
      res += m;
   }

   if (a*d < b*c) {
      swap(a, b);
      swap(c, d);
   }
   if (a<d) swap(a,d);
   if (b<c) swap(b, c);

   double w = a*d - b*c;
   long long w2 = a+b+c+d;
   if (!a && !b && !c && !d) printf("%.9lf", res);
   else{
      double w3 = ((double)(w))/w2;
      printf("%.9lf", w3+res);
   }
   return 0;
}


#include <iostream>
#include <cstdio>
#define abs(x) (((x)>0)?(x):(-(x)))
using namespace std;
long long a,b,c,d;
double res;
int main() {
   scanf("%lld %lld %lld %lld", &a,&b,&c,&d);
   if (((a*d > 0)&&(b*c<0)) || ((a*d < 0) && (b*c > 0))) {
      a = abs(a), b=abs(b), c=abs(c), d=abs(d);
      long long m= a,n=0;
      if (b < m) m = b , n=1;
      if (c < m) m = c , n=2;
      if (d < m) m = d , n=3;
      a -= m;
      b -= m;
      c -= m;
      d -= m;
      if (n==0) d += 2*m;
      else if(n==1) c += 2*m;
      else if (n==2) b += 2*m;
      else if (n==3) a += 2*m;
      res += m;
   }
   a = abs(a), b=abs(b), c=abs(c), d=abs(d);
   if (a*d < b*c) {
      swap(a, b);
      swap(c, d);
   }
   if (a<d) swap(a,d);
   if (b<c) swap(b, c);

   long long w = a*d -b*c;
   double s = w;
   long long w2 = a+b+c+d;
   if (!w2 || !s) printf("%.10lf", res);
   else{
      double w3 = s/w2;
      printf("%.10lf", w3+res);
   }
   return 0;
}


#include <iostream>
#include <cstdio>
#define abs(x) (((x)>0)?(x):(-(x)))
using namespace std;
long long a,b,c,d;
double res;
int main() {
   scanf("%lld %lld %lld %lld", &a,&b,&c,&d);
   if (((a*d > 0)&&(b*c<0)) || ((a*d < 0) && (b*c > 0))) {
      a = abs(a), b=abs(b), c=abs(c), d=abs(d);
      long long m= a,n=0;
      if (b < m) m = b , n=1;
      if (c < m) m = c , n=2;
      if (d < m) m = d , n=3;
      a -= m;
      b -= m;
      c -= m;
      d -= m;
      if (n==0) d += 2*m;
      else if(n==1) c += 2*m;
      else if (n==2) b += 2*m;
      else if (n==3) a += 2*m;
      res += m;
   }

   if (a*d < b*c) {
      swap(a, b);
      swap(c, d);
   }
   if (a<d) swap(a,d);
   if (b<c) swap(b, c);

   long long w = a*d -b*c;
   double s = w;
   long long w2 = a+b+c+d;
   if (!w2 || !s) printf("%.10lf", res);
   else{
      double w3 = s/w2;
      printf("%.10lf", w3+res);
   }
   return 0;
}


#include<iostream>
#include<algorithm>
#include<string>
#include<map>//int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};
#include<set>//int gcd(int a,int b){return b?gcd(b,a%b):a;}
#include<vector>
#include<cmath>
#include<queue>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#define mod 1e9+7
#define ll long long
using namespace std;
const double eps=0.00000000001;
int main(){
    double a,b,c,d;
    cin>>a>>b>>c>>d;
    double l=0,r=1000000000,mid;
    for(int i=0;i<100;i++){
        mid=(l+r)/2;
        double max_x=max(max((a+mid)*(d+mid),(a-mid)*(d+mid)),max((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double min_x=min(min((a+mid)*(d+mid),(a-mid)*(d+mid)),min((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double max_y=max(max((b+mid)*(c+mid),(b-mid)*(c+mid)),max((b+mid)*(c-mid),(b-mid)*(c-mid)));
        double min_y=min(min((b+mid)*(c+mid),(b-mid)*(c+mid)),min((b+mid)*(c-mid),(b-mid)*(c-mid)));
        if(max_x-min_y>=0&&min_x-max_y<=0)
            r=mid;
        else
            l=mid;
    }
    printf("%.10lf\n",l);
    return 0;
}


#include<iostream>
#include<algorithm>
#include<string>
#include<map>//int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};
#include<set>//int gcd(int a,int b){return b?gcd(b,a%b):a;}
#include<vector>
#include<cmath>
#include<queue>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#define mod 1e9+7
#define ll long long
using namespace std;
const double eps=0.00000000001;
int main(){
    double a,b,c,d;
    cin>>a>>b>>c>>d;
    double l=0,r=1000000000,mid;
    while(r-l>eps{
        mid=(l+r)/2;
        double max_x=max(max((a+mid)*(d+mid),(a-mid)*(d+mid)),max((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double min_x=min(min((a+mid)*(d+mid),(a-mid)*(d+mid)),min((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double max_y=max(max((b+mid)*(c+mid),(b-mid)*(c+mid)),max((b+mid)*(c-mid),(b-mid)*(c-mid)));
        double min_y=min(min((b+mid)*(c+mid),(b-mid)*(c+mid)),min((b+mid)*(c-mid),(b-mid)*(c-mid)));
        if(max_x-min_y>=0&&min_x-max_y<=0)
            r=mid;
        else
            l=mid;
    }
    printf("%.10lf\n",l);
    return 0;
}


#include<iostream>
#include<algorithm>
#include<string>
#include<map>//int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};
#include<set>//int gcd(int a,int b){return b?gcd(b,a%b):a;}
#include<vector>
#include<cmath>
#include<queue>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#define mod 1e9+7
#define ll long long
using namespace std;
const double eps=0.00000000001;
int main(){
    double a,b,c,d;
    cin>>a>>b>>c>>d;
    double l=0,r=1000000000,mid;
    while(r-l>0.0000000005){
        mid=(l+r)/2;
        double max_x=max(max((a+mid)*(d+mid),(a-mid)*(d+mid)),max((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double min_x=min(min((a+mid)*(d+mid),(a-mid)*(d+mid)),min((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double max_y=max(max((b+mid)*(c+mid),(b-mid)*(c+mid)),max((b+mid)*(c-mid),(b-mid)*(c-mid)));
        double min_y=min(min((b+mid)*(c+mid),(b-mid)*(c+mid)),min((b+mid)*(c-mid),(b-mid)*(c-mid)));
        if(max_x-min_y>=0&&min_x-max_y<=0)
            r=mid;
        else
            l=mid;
    }
    printf("%.10lf\n",l);
    return 0;
}


#include<iostream>
#include<algorithm>
#include<string>
#include<map>//int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};
#include<set>//int gcd(int a,int b){return b?gcd(b,a%b):a;}
#include<vector>
#include<cmath>
#include<queue>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#define mod 1e9+7
#define ll long long
using namespace std;
const double eps=0.00000000001;
int main(){
    double a,b,c,d;
    cin>>a>>b>>c>>d;
    double l=0,r=1000000000,mid;
    while(r-l>0.00000000005){
        mid=(l+r)/2;
        double max_x=max(max((a+mid)*(d+mid),(a-mid)*(d+mid)),max((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double min_x=min(min((a+mid)*(d+mid),(a-mid)*(d+mid)),min((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double max_y=max(max((b+mid)*(c+mid),(b-mid)*(c+mid)),max((b+mid)*(c-mid),(b-mid)*(c-mid)));
        double min_y=min(min((b+mid)*(c+mid),(b-mid)*(c+mid)),min((b+mid)*(c-mid),(b-mid)*(c-mid)));
        if(max_x-min_y>=0&&min_x-max_y<=0)
            r=mid;
        else
            l=mid;
    }
    printf("%.10lf\n",l);
    return 0;
}


#include<iostream>
#include<algorithm>
#include<string>
#include<map>//int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};
#include<set>//int gcd(int a,int b){return b?gcd(b,a%b):a;}
#include<vector>
#include<cmath>
#include<queue>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#define mod 1e9+7
#define ll long long
using namespace std;
const float eps=0.00000000001;
int main(){
    float a,b,c,d;
    cin>>a>>b>>c>>d;
    float l=0,r=1000000000,mid;
    while(r-l>eps){
        mid=(l+r)/2;
        float max_x=max(max((a+mid)*(d+mid),(a-mid)*(d+mid)),max((a+mid)*(d-mid),(a-mid)*(d-mid)));
        float min_x=min(min((a+mid)*(d+mid),(a-mid)*(d+mid)),min((a+mid)*(d-mid),(a-mid)*(d-mid)));
        float max_y=max(max((b+mid)*(c+mid),(b-mid)*(c+mid)),max((b+mid)*(c-mid),(b-mid)*(c-mid)));
        float min_y=min(min((b+mid)*(c+mid),(b-mid)*(c+mid)),min((b+mid)*(c-mid),(b-mid)*(c-mid)));
        if(max_x-min_y>=0&&min_x-max_y<=0)
            r=mid;
        else
            l=mid;
    }
    printf("%.10f\n",l);
    return 0;
}


#include<iostream>
#include<algorithm>
#include<string>
#include<map>//int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};
#include<set>//int gcd(int a,int b){return b?gcd(b,a%b):a;}
#include<vector>
#include<cmath>
#include<queue>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#define mod 1e9+7
#define ll long long
using namespace std;
const double eps=0.00000000001;
int main(){
    double a,b,c,d;
    cin>>a>>b>>c>>d;
    double l=0,r=1000000000,mid;
    while(r-l>eps){
        mid=(l+r)/2;
        double max_x=max(max((a+mid)*(d+mid),(a-mid)*(d+mid)),max((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double min_x=min(min((a+mid)*(d+mid),(a-mid)*(d+mid)),min((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double max_y=max(max((b+mid)*(c+mid),(b-mid)*(c+mid)),max((b+mid)*(c-mid),(b-mid)*(c-mid)));
        double min_y=min(min((b+mid)*(c+mid),(b-mid)*(c+mid)),min((b+mid)*(c-mid),(b-mid)*(c-mid)));
        if(max_x-min_y>=0&&min_x-max_y<=0)
            r=mid;
        else
            l=mid;
    }
    printf("%.10lf\n",l);
    return 0;
}


#include<iostream>
#include<algorithm>
#include<string>
#include<map>//int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};
#include<set>//int gcd(int a,int b){return b?gcd(b,a%b):a;}
#include<vector>
#include<cmath>
#include<queue>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#define mod 1e9+7
#define ll long long
using namespace std;
const double eps=0.00000000001;
int main(){
    double a,b,c,d;
    cin>>a>>b>>c>>d;
    double l=0,r=1000000000,mid;
    while(r-l>eps){
        mid=(l+r)/2;
        double max_x=max(max((a+mid)*(d+mid),(a-mid)*(d+mid)),max((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double min_x=min(min((a+mid)*(d+mid),(a-mid)*(d+mid)),min((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double max_y=max(max((b+mid)*(c+mid),(b-mid)*(c+mid)),max((b+mid)*(c-mid),(b-mid)*(c-mid)));
        double min_y=min(min((b+mid)*(c+mid),(b-mid)*(c+mid)),min((b+mid)*(c-mid),(b-mid)*(c-mid)));
        if(max_x-min_y>=0&&min_x-max_y<=0)
            r=mid;
        else
            l=mid;
//        printf("%.10lf\n",r-l-eps);
    }
    printf("%.10lf\n",l);
    return 0;
}


#include<iostream>
#include<algorithm>
#include<string>
#include<map>//int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};
#include<set>//int gcd(int a,int b){return b?gcd(b,a%b):a;}
#include<vector>
#include<cmath>
#include<queue>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#define mod 1e9+7
#define ll long long
using namespace std;
const double eps=0.00000000001;
int main(){
    double a,b,c,d;
    cin>>a>>b>>c>>d;
    double l=0,r=1000000000,mid;
    while(r-l>0.0000003){
        mid=(l+r)/2;
        double max_x=max(max((a+mid)*(d+mid),(a-mid)*(d+mid)),max((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double min_x=min(min((a+mid)*(d+mid),(a-mid)*(d+mid)),min((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double max_y=max(max((b+mid)*(c+mid),(b-mid)*(c+mid)),max((b+mid)*(c-mid),(b-mid)*(c-mid)));
        double min_y=min(min((b+mid)*(c+mid),(b-mid)*(c+mid)),min((b+mid)*(c-mid),(b-mid)*(c-mid)));
        if(max_x-min_y>=0&&min_x-max_y<=0)
            r=mid;
        else
            l=mid;
//        cout<<r-l-0.0000000003<<endl;;
    }
    printf("%.10lf\n",l);
    return 0;
}


#include<iostream>
#include<algorithm>
#include<string>
#include<map>//int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};
#include<set>//int gcd(int a,int b){return b?gcd(b,a%b):a;}
#include<vector>
#include<cmath>
#include<queue>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#define mod 1e9+7
#define ll long long
using namespace std;
const double eps=0.00000000001;
int main(){
    double a,b,c,d;
    cin>>a>>b>>c>>d;
    double l=0,r=1000000000,mid;
    while(r-l>0.0001){
        mid=(l+r)/2;
        double max_x=max(max((a+mid)*(d+mid),(a-mid)*(d+mid)),max((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double min_x=min(min((a+mid)*(d+mid),(a-mid)*(d+mid)),min((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double max_y=max(max((b+mid)*(c+mid),(b-mid)*(c+mid)),max((b+mid)*(c-mid),(b-mid)*(c-mid)));
        double min_y=min(min((b+mid)*(c+mid),(b-mid)*(c+mid)),min((b+mid)*(c-mid),(b-mid)*(c-mid)));
        if(max_x-min_y>=0&&min_x-max_y<=0)
            r=mid;
        else
            l=mid;
    }
    printf("%.10lf\n",l);
    return 0;
}


#include<iostream>
#include<algorithm>
#include<string>
#include<map>//int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};
#include<set>//int gcd(int a,int b){return b?gcd(b,a%b):a;}
#include<vector>
#include<cmath>
#include<queue>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#define mod 1e9+7
#define ll long long
using namespace std;
const double eps=0.00000000001;
int main(){
    double a,b,c,d;
    cin>>a>>b>>c>>d;
    double l=0,r=1000000000,mid;
    while(r-l>0.0000000003){
        mid=(l+r)/2;
        double max_x=max(max((a+mid)*(d+mid),(a-mid)*(d+mid)),max((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double min_x=min(min((a+mid)*(d+mid),(a-mid)*(d+mid)),min((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double max_y=max(max((b+mid)*(c+mid),(b-mid)*(c+mid)),max((b+mid)*(c-mid),(b-mid)*(c-mid)));
        double min_y=min(min((b+mid)*(c+mid),(b-mid)*(c+mid)),min((b+mid)*(c-mid),(b-mid)*(c-mid)));
        if(max_x-min_y>=0&&min_x-max_y<=0)
            r=mid;
        else
            l=mid;
    }
    printf("%.10lf\n",l);
    return 0;
}


#include<iostream>
#include<algorithm>
#include<string>
#include<map>//int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};
#include<set>//int gcd(int a,int b){return b?gcd(b,a%b):a;}
#include<vector>
#include<cmath>
#include<queue>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#define mod 1e9+7
#define ll long long
using namespace std;
const double eps=1e-10;
int main(){
    double a,b,c,d;
    cin>>a>>b>>c>>d;
    double l=0,r=1000000000,mid;
    while(r-l>eps){
        mid=(l+r)/2;
        double max_x=max(max((a+mid)*(d+mid),(a-mid)*(d+mid)),max((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double min_x=min(min((a+mid)*(d+mid),(a-mid)*(d+mid)),min((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double max_y=max(max((b+mid)*(c+mid),(b-mid)*(c+mid)),max((b+mid)*(c-mid),(b-mid)*(c-mid)));
        double min_y=min(min((b+mid)*(c+mid),(b-mid)*(c+mid)),min((b+mid)*(c-mid),(b-mid)*(c-mid)));
        if(max_x-min_y>=0&&min_x-max_y<=0)
            r=mid;
        else
            l=mid;
//        printf("%.12lf %.12lf %.12lf \n",l,r,r-l);
    }
    printf("%.10lf\n",l);
    return 0;
}


#include<iostream>
#include<algorithm>
#include<string>
#include<map>//int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};
#include<set>//int gcd(int a,int b){return b?gcd(b,a%b):a;}
#include<vector>
#include<cmath>
#include<queue>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#define mod 1e9+7
#define ll long long
using namespace std;
const double eps=0.00000000001;
int main(){
    double a,b,c,d;
    cin>>a>>b>>c>>d;
    double l=0,r=1000000000,mid;
    while(r-l>0.0000000001){
        mid=(l+r)/2;
        double max_x=max(max((a+mid)*(d+mid),(a-mid)*(d+mid)),max((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double min_x=min(min((a+mid)*(d+mid),(a-mid)*(d+mid)),min((a+mid)*(d-mid),(a-mid)*(d-mid)));
        double max_y=max(max((b+mid)*(c+mid),(b-mid)*(c+mid)),max((b+mid)*(c-mid),(b-mid)*(c-mid)));
        double min_y=min(min((b+mid)*(c+mid),(b-mid)*(c+mid)),min((b+mid)*(c-mid),(b-mid)*(c-mid)));
        if(max_x-min_y>=0&&min_x-max_y<=0)
            r=mid;
        else
            l=mid;
    }
    printf("%.10lf\n",l);
    return 0;
}


#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int main()
{
    double a, b, c, d;
    double x1, x0;
    double ans;

    cin >> a >> b >> c >> d;

    x1 = a + d + b + c;
    x0 = b * c - a * d;
    ans = abs(x0 / x1);

    cout << fixed << setprecision(10) << ans << endl;
}


// learn from:  http://codeforces.com/blog/entry/18363?#comment-233555
#include <iostream>
#include <iomanip>
using namespace std;

const double EPS = 1e-10;
const double INF = 1e10;

double a, b, c, d;
bool check(double x)
{
    double ad_low  = min( min( (a-x)*(d-x), (a-x)*(d+x) ), min( (a+x)*(d-x), (a+x)*(d+x) ) );
    double ad_high = max( max( (a-x)*(d-x), (a-x)*(d+x) ), max( (a+x)*(d-x), (a+x)*(d+x) ) );

    double bc_low  = min( min( (b-x)*(c-x), (b-x)*(c+x) ), min( (b+x)*(c-x), (b+x)*(c+x) ) );
    double bc_high = max( max( (b-x)*(c-x), (b-x)*(c+x) ), max( (b+x)*(c-x), (b+x)*(c+x) ) );

    if(ad_high < bc_low || bc_high < ad_low)
        return false;
    else
        return true;
}

int main()
{

    cin >> a >> b >> c >> d;

    double L = 0, R = INF;
    double M;
    int cnt = 0;

    cout << fixed << setprecision(10);

    while(cnt < 100) // why 100 times ?  because the range 0 ~ 10^9 needs log2(10^9) ~= 30 times
    {
        cnt++;
        M = (L + R) / 2;

        if(check(M))
            R = M;
        else
            L = M;
    }

    cout << M << endl;

}


#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int main()
{
    int a, b, c, d;
    double x1, x0;
    double ans;

    cin >> a >> b >> c >> d;

    x1 = a + d + b + c;
    x0 = b * c - a * d;
    ans = abs(x0 / x1);

    cout << fixed << setprecision(10) << ans << endl;
}


#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int main()
{
    long long a, b, c, d;
    double x1, x0;
    double ans;

    cin >> a >> b >> c >> d;

    x1 = a + d + b + c;
    x0 = b * c - a * d;
    ans = abs(x0 / x1);

    cout << ans << endl;
}


// http://codeforces.com/blog/entry/18363?#comment-233555
#include <iostream>
#include <iomanip>
using namespace std;

const double EPS = 1e-10;
const double INF = 1e10;

double a, b, c, d;
bool check(double x)
{
    double ad_low  = min( min( (a-x)*(d-x), (a-x)*(d+x) ), min( (a+x)*(d-x), (a+x)*(d+x) ) );
    double ad_high = max( max( (a-x)*(d-x), (a-x)*(d+x) ), max( (a+x)*(d-x), (a+x)*(d+x) ) );

    double bc_low  = min( min( (b-x)*(c-x), (b-x)*(c+x) ), min( (b+x)*(c-x), (b+x)*(c+x) ) );
    double bc_high = max( max( (b-x)*(c-x), (b-x)*(c+x) ), max( (b+x)*(c-x), (b+x)*(c+x) ) );

    if(ad_high < bc_low || bc_high < ad_low)
        return false;
    else
        return true;
}

int main()
{

    cin >> a >> b >> c >> d;

    double L = 0, R = INF;
    double M;
    int cnt = 0;

    cout << fixed << setprecision(10);

    while(R-L > EPS && cnt < 100)
    {
        cnt++;
        M = (L + R) / 2;

        if(check(M))
            R = M;
        else
            L = M;
    }

    cout << M << endl;

}


#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int main()
{
    double a, b, c, d;
    double x1 = 0, x0;

    cin >> a >> b >> c >> d;

    x1 = max(x1, abs( a + d + b + c) );
    x1 = max(x1, abs(-a + d + b - c) );
    x1 = max(x1, abs(-a + d - b + c) );
    x1 = max(x1, abs( a + d - b - c) );
    x0 = abs(b * c - a * d);

    cout << x0 / x1 << endl;
}


#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int main()
{
    double a, b, c, d;
    double x1 = 0, x0;

    cin >> a >> b >> c >> d;

    x1 = max(x1, abs( a + d + b + c) );
    x1 = max(x1, abs(-a + d + b - c) );
    x1 = max(x1, abs(-a + d - b + c) );
    x1 = max(x1, abs( a + d - b - c) );
    x0 = abs(b * c - a * d);

    cout << fixed << setprecision(10) << x0 / x1 << endl;
}


// http://codeforces.com/blog/entry/18363?#comment-233555
#include <iostream>
#include <iomanip>
using namespace std;

const double EPS = 1e-10;
const double INF = 1e10;

double a, b, c, d;
bool check(double x)
{
    double ad_low  = min( min( (a-x)*(d-x), (a-x)*(d+x) ), min( (a+x)*(d-x), (a+x)*(d+x) ) );
    double ad_high = max( max( (a-x)*(d-x), (a-x)*(d+x) ), max( (a+x)*(d-x), (a+x)*(d+x) ) );

    double bc_low  = min( min( (b-x)*(c-x), (b-x)*(c+x) ), min( (b+x)*(c-x), (b+x)*(c+x) ) );
    double bc_high = max( max( (b-x)*(c-x), (b-x)*(c+x) ), max( (b+x)*(c-x), (b+x)*(c+x) ) );

    if(ad_high < bc_low || bc_high < ad_low)
        return false;
    else
        return true;
}

int main()
{

    cin >> a >> b >> c >> d;

    double L = 0, R = INF;
    double M;

    while(R-L > EPS)
    {
        M = (L + R) / 2;

        if(check(M))
            R = M;
        else
            L = M;
    }

    cout << fixed << setprecision(10) << M << endl;

}


#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int main()
{
    long long a, b, c, d;
    double x1, x0;
    double ans;

    cin >> a >> b >> c >> d;

    x1 = a + d + b + c;
    x0 = b * c - a * d;
    ans = abs(x0 / x1);

    cout << fixed << setprecision(10) << ans << endl;
}


#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int main()
{
    double a, b, c, d;
    double x1 = 0, x0;
    double ans;

    cin >> a >> b >> c >> d;

    x1 = max(x1, a + d + b + c);
    x1 = max(x1, -a + d + b - c);
    x1 = max(x1, -a + d - b + c);
    x1 = max(x1, a + d - b - c);
    x0 = b * c - a * d;
    ans = abs(x0 / x1);

    cout << ans << endl;
}


#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int main()
{
    double a, b, c, d;
    double x1 = 0, x0;

    cin >> a >> b >> c >> d;

    x1 = max(x1, abs( a + d + b + c) );
    x1 = max(x1, abs(-a + d + b - c) );
    x1 = max(x1, abs(-a + d - b + c) );
    x1 = max(x1, abs( a + d - b - c) );
    x0 = abs(b * c - a * d);

    if(x1 == 0) cout << 0 << endl;
    else cout << fixed << setprecision(10) << x0 / x1 << endl;
}


// http://codeforces.com/blog/entry/18363?#comment-233555
#include <iostream>
#include <iomanip>
using namespace std;

const double EPS = 1e-10;
const double INF = 1e10;

double a, b, c, d;
bool check(double x)
{
    double ad_low  = min( min( (a-x)*(d-x), (a-x)*(d+x) ), min( (a+x)*(d-x), (a+x)*(d+x) ) );
    double ad_high = max( max( (a-x)*(d-x), (a-x)*(d+x) ), max( (a+x)*(d-x), (a+x)*(d+x) ) );

    double bc_low  = min( min( (b-x)*(c-x), (b-x)*(c+x) ), min( (b+x)*(c-x), (b+x)*(c+x) ) );
    double bc_high = max( max( (b-x)*(c-x), (b-x)*(c+x) ), max( (b+x)*(c-x), (b+x)*(c+x) ) );

    if(ad_high < bc_low || bc_high < ad_low)
        return false;
    else
        return true;
}

int main()
{

    cin >> a >> b >> c >> d;

    double L = 0, R = INF;
    double M;
    int cnt = 0;

    cout << fixed << setprecision(10);

    while(cnt < 100)
    {
        cnt++;
        M = (L + R) / 2;

        if(check(M))
            R = M;
        else
            L = M;
    }

    cout << M << endl;

}


//...
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<string>
#define Pi 3.14159265358
#define mod9 %1000000009
#define mod7 %1000000007
#define INF 1000000000
#define LL  long long
using namespace std;
 LL a,b,c,d;
const double eps=0.0000000001;
 long double l,r,mid;
long double f3(long double a1,long double a2,long double b1,long double b2){
return max(max(a1*b1,a1*b2),max(a2*b1,a2*b2));
 }
 long double f2(long double a1,long double a2,long double b1,long double b2){
        long double s1,s2;
        return min(min(a1*b1,a1*b2),min(a2*b1,a2*b2));
 }
 bool f(long double e){
    long double mini1=f2(a-e,a+e,d-e,d+e),mini2=f2(b-e,b+e,c-e,c+e);
    long double maxi1=f3(a-e,a+e,d-e,d+e),maxi2=f3(b-e,b+e,c-e,c+e);;
    if (mini1+eps>=mini2 && mini1<=maxi2+eps) return 1;
    if (maxi1+eps>=mini2 && maxi1<=maxi2+eps) return 1;
    return 0;
 }
int main(){
 #ifndef ONLINE_JUDGE
   freopen("input.txt","r",stdin);
   freopen("output.txt","w",stdout);
 #endif
    cin>>a>>b>>c>>d;
    l=0; r=1000000000;
    while (r-l>0.000000001){
        mid=(l+r)/2;
        if (f(mid)) r=mid; else l=mid;
    }
    cout<<fixed<<setprecision(10)<<l<<endl;
 return 0;
}


//...
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<string>
#define Pi 3.14159265358
#define mod9 %1000000009
#define mod7 %1000000007
#define INF 1000000000
#define LL  long long
using namespace std;
 LL a,b,c,d;
const double eps=0.000000001;
 long double l,r,mid;
long double f3(long double a1,long double a2,long double b1,long double b2){
return max(max(a1*b1,a1*b2),max(a2*b1,a2*b2));
 }
 long double f2(long double a1,long double a2,long double b1,long double b2){
        long double s1,s2;
        return min(min(a1*b1,a1*b2),min(a2*b1,a2*b2));
 }
 bool f(long double e){
    long double mini1=f2(a-e,a+e,d-e,d+e),mini2=f2(b-e,b+e,c-e,c+e);
    long double maxi1=f3(a-e,a+e,d-e,d+e),maxi2=f3(b-e,b+e,c-e,c+e);;
    if (mini1+eps>=mini2 && mini1<=maxi2+eps) return 1;
    if (maxi1+eps>=mini2 && maxi1<=maxi2+eps) return 1;
    return 0;
 }
int main(){
 #ifndef ONLINE_JUDGE
   freopen("input.txt","r",stdin);
   freopen("output.txt","w",stdout);
 #endif
    cin>>a>>b>>c>>d;
    l=0; r=1000000000;
    while (r-l>0.000000001){
        mid=(l+r)/2;
        if (f(mid)) r=mid; else l=mid;
    }
    cout<<fixed<<setprecision(10)<<l<<endl;
 return 0;
}


//...
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<string>
#define Pi 3.14159265358
#define mod9 %1000000009
#define mod7 %1000000007
#define INF 1000000000
#define LL  long long
using namespace std;
 LL a,b,c,d;
const double eps=0.000000001;
 long double l,r,mid;
long double f3(long double a1,long double a2,long double b1,long double b2){
return max(max(a1*b1,a1*b2),max(a2*b1,a2*b2));
 }
 long double f2(long double a1,long double a2,long double b1,long double b2){
        long double s1,s2;
        return min(min(a1*b1,a1*b2),min(a2*b1,a2*b2));
 }
 bool f(long double e){
    long double mini1=f2(a-e,a+e,d-e,d+e),mini2=f2(b-e,b+e,c-e,c+e);
    long double maxi1=f3(a-e,a+e,d-e,d+e),maxi2=f3(b-e,b+e,c-e,c+e);;
    if (mini1+eps>=mini2 && mini1<=maxi2+eps) return 1;
    if (maxi1+eps>=mini2 && maxi1<=maxi2+eps) return 1;
    return 0;
 }
int main(){
 #ifndef ONLINE_JUDGE
   freopen("input.txt","r",stdin);
   freopen("output.txt","w",stdout);
 #endif
    cin>>a>>b>>c>>d;
    l=0; r=100000000;
    while (r-l>0.000000001){
        mid=(l+r)/2;
        if (f(mid)) r=mid; else l=mid;
    }
    cout<<fixed<<setprecision(10)<<l<<endl;
 return 0;
}


//...
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<string>
#define Pi 3.14159265358
#define mod9 %1000000009
#define mod7 %1000000007
#define INF 1000000000
#define LL  long long
using namespace std;
 LL a,b,c,d;
 long double l,r,mid;
long double f3(long double a1,long double a2,long double b1,long double b2){
return max(max(a1*b1,a1*b2),max(a2*b1,a2*b2));
 }
 long double f2(long double a1,long double a2,long double b1,long double b2){
        long double s1,s2;
        return min(min(a1*b1,a1*b2),min(a2*b1,a2*b2));
 }
 bool f(long double e){
    long double mini1=f2(a-e,a+e,d-e,d+e),mini2=f2(b-e,b+e,c-e,c+e);
    long double maxi1=f3(a-e,a+e,d-e,d+e),maxi2=f3(b-e,b+e,c-e,c+e);;
    if (mini1>=mini2 && mini1<=maxi2) return 1;
    if (maxi1>=mini2 && maxi1<=maxi2) return 1;
    return 0;
 }
int main(){
 #ifndef ONLINE_JUDGE
   freopen("input.txt","r",stdin);
   freopen("output.txt","w",stdout);
 #endif
    cin>>a>>b>>c>>d;
    l=0; r=1000000000;
    while (r-l>0.000000001){
        mid=(l+r)/2;
        if (f(mid)) r=mid; else l=mid;
    }
    cout<<fixed<<setprecision(10)<<l<<endl;
 return 0;
}


//...
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<string>
#define Pi 3.14159265358
#define mod9 %1000000009
#define mod7 %1000000007
#define INF 1000000000
#define LL  long long
using namespace std;
 LL a,b,c,d;
 long double l,r,mid;
long double f3(long double a1,long double a2,long double b1,long double b2){
return max(max(a1*b1,a1*b2),max(a2*b1,a2*b2));
 }
 long double f2(long double a1,long double a2,long double b1,long double b2){
        long double s1,s2;
        return min(min(a1*b1,a1*b2),min(a2*b1,a2*b2));
 }
 bool f(long double e){
    long double mini1=f2(a-e,a+e,d-e,d+e),mini2=f2(b-e,b+e,c-e,c+e);
    long double maxi1=f3(a-e,a+e,d-e,d+e),maxi2=f3(b-e,b+e,c-e,c+e);;
    if (mini1>=mini2 && mini1<=maxi2) return 1;
    if (maxi1>=mini2 && maxi1<=maxi2) return 1;
    return 0;
 }
int main(){
 #ifndef ONLINE_JUDGE
   freopen("input.txt","r",stdin);
   freopen("output.txt","w",stdout);
 #endif
    cin>>a>>b>>c>>d;
    l=0; r=100000000;
    while (r-l>0.000000001){
        mid=(l+r)/2;
        if (f(mid)) r=mid; else l=mid;
    }
    cout<<fixed<<setprecision(10)<<l<<endl;
 return 0;
}


//...
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<string>
#define Pi 3.14159265358
#define mod9 %1000000009
#define mod7 %1000000007
#define INF 1000000000
#define LL  long long
using namespace std;
 LL a,b,c,d;
 long double l,r,mid;
long double f3(long double a1,long double a2,long double b1,long double b2){
return max(max(a1*b1,a1*b2),max(a2*b1,a2*b2));
 }
 long double f2(long double a1,long double a2,long double b1,long double b2){
        long double s1,s2;
        return min(min(a1*b1,a1*b2),min(a2*b1,a2*b2));
 }
 bool f(long double e){
    long double mini1=f2(a-e,a+e,d-e,d+e),mini2=f2(b-e,b+e,c-e,c+e);
    long double maxi1=f3(a-e,a+e,d-e,d+e),maxi2=f3(b-e,b+e,c-e,c+e);;
    if (mini1>=mini2 && mini1<=maxi2) return 1;
    if (maxi1>=mini2 && maxi1<=maxi2) return 1;
    return 0;
 }
int main(){
 #ifndef ONLINE_JUDGE
   freopen("input.txt","r",stdin);
   freopen("output.txt","w",stdout);
 #endif
    cin>>a>>b>>c>>d;
    l=0; r=1000000000;
    while (r-l>0.000000000001){
        mid=(l+r)/2;
        if (f(mid)) r=mid; else l=mid;
    }
    cout<<fixed<<setprecision(10)<<l<<endl;
 return 0;
}


//...
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<string>
#define Pi 3.14159265358
#define mod9 %1000000009
#define mod7 %1000000007
#define INF 1000000000
#define LL  long long
using namespace std;
 LL a,b,c,d;
 long double l,r,mid;
long double f3(long double a1,long double a2,long double b1,long double b2){
return max(max(a1*b1,a1*b2),max(a2*b1,a2*b2));
 }
 long double f2(long double a1,long double a2,long double b1,long double b2){
        long double s1,s2;
        return min(min(a1*b1,a1*b2),min(a2*b1,a2*b2));
 }
 bool f(long double e){
    long double mini1=f2(a-e,a+e,d-e,d+e),mini2=f2(b-e,b+e,c-e,c+e);
    long double maxi1=f3(a-e,a+e,d-e,d+e),maxi2=f3(b-e,b+e,c-e,c+e);;
    if (mini1>=mini2 && mini1<=maxi2) return 1;
    if (maxi1>=mini2 && maxi1<=maxi2) return 1;
if (mini1<=mini2 && maxi1>=maxi2) return 1;
    return 0;
 }
int main(){
 #ifndef ONLINE_JUDGE
   freopen("input.txt","r",stdin);
   freopen("output.txt","w",stdout);
 #endif
    cin>>a>>b>>c>>d;
    l=0; r=1000000000;
    while (r-l>0.000000001){
        mid=(l+r)/2;
        if (f(mid)) r=mid; else l=mid;
    }
    cout<<fixed<<setprecision(10)<<l<<endl;
 return 0;
}


/***********************************
*                                  *
*    Auther Rhapsody               *
*    E-mail addf400@foxmail.com    *
*                                  *
***********************************/
#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

typedef long long LL;

const int N = 1e5 + 7;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-10;

int a, b, c, d;

inline bool can(double ans) {
    double x1 = a + ans, y1 = a - ans;
    double x2 = b + ans, y2 = b - ans;
    double x3 = c + ans, y3 = c - ans;
    double x4 = d + ans, y4 = d - ans;
    //cout << x1 << ' ' << y1 << endl;
    //cout << x2 << ' ' << y2 << endl;
    //cout << x3 << ' ' << y3 << endl;
    //cout << x4 << ' ' << y4 << endl;
    double u1 = x1 * x4, v1 = y1 * y4;
    double u2 = x3 * x2, v2 = y3 * y2;
    if (u1 > v1)
        swap(u1, v1);
    if (u2 > v2)
        swap(u2, v2);
    //cout << u1 << ' ' << v1 << endl;
    //cout << u2 << ' ' << v2 << endl;
    if ((u1 < u2 && v1 + EPS > u2) || (u1 > u2 && v2 + EPS > u1)) return true;
    return false;
}

int main(void) {
    cin >> a >> b;
    cin >> c >> d;
    double l = 0, r = 1.0;
    //can(0.2);
    //return 0;
    while (r - l > EPS) {
        double mid = (l + r) / 2;
        //printf("%lf - %lf\n", l, r);
        if (can(mid))
            r = mid;
        else
            l = mid;
    }
    printf("%.10lf\n", l);
    return 0;
}


/***********************************
*                                  *
*    Auther Rhapsody               *
*    E-mail addf400@foxmail.com    *
*                                  *
***********************************/
#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

typedef long long LL;

const int N = 1e5 + 7;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-10;

int a, b, c, d;

bool can(double ans) {
    double x1 = a + ans, y1 = a - ans;
    double x2 = b + ans, y2 = b - ans;
    double x3 = c + ans, y3 = c - ans;
    double x4 = d + ans, y4 = d - ans;
    //cout << x1 << ' ' << y1 << endl;
    //cout << x2 << ' ' << y2 << endl;
    //cout << x3 << ' ' << y3 << endl;
    //cout << x4 << ' ' << y4 << endl;
    double u1 = x1 * x4, v1 = y1 * y4;
    double u2 = x3 * x2, v2 = y3 * y2;
    if (u1 > v1)
        swap(u1, v1);
    if (u2 > v2)
        swap(u2, v2);
    //cout << u1 << ' ' << v1 << endl;
    //cout << u2 << ' ' << v2 << endl;
    if ((u1 < u2 && v1 + EPS > u2) || (u1 > u2 && v2 + EPS > u1)) return true;
    return false;
}

int main(void) {
    cin >> a >> b;
    cin >> c >> d;
    double l = 0, r = max(max(a, b), max(c, d));
    //can(0.2);
    //return 0;
    while (r - l > EPS) {
        double mid = (l + r) / 2;
        //printf("%lf - %lf\n", l, r);
        if (can(mid))
            r = mid;
        else
            l = mid;
    }
    printf("%.10lf\n", l);
    return 0;
}


/***********************************
*                                  *
*    Auther Rhapsody               *
*    E-mail addf400@foxmail.com    *
*                                  *
***********************************/
#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

typedef long long LL;

const int N = 1e5 + 7;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-10;

int a, b, c, d;

inline bool can(double ans) {
    double x1 = a + ans, y1 = a - ans;
    double x2 = b + ans, y2 = b - ans;
    double x3 = c + ans, y3 = c - ans;
    double x4 = d + ans, y4 = d - ans;
    double u1 = min(min(x1 * x4, x1 * y4), min(y1 * x4, y1 * y4)), v1 = max(max(x1 * x4, x1 * y4), max(y1 * x4, y1 * y4));
    double u2 = min(min(x2 * x3, x2 * y3), min(y2 * x3, y2 * y3)), v2 = max(max(x2 * x3, x2 * y3), max(y2 * x3, y2 * y3));
    if (u1 > v1)
        swap(u1, v1);
    if (u2 > v2)
        swap(u2, v2);
//  cout << u1 << ' ' << v1 << endl;
//  cout << u2 << ' ' << v2 << endl;
    if ((u1 <= u2 && v1 + EPS >= u2) || (u1 >= u2 && v2 + EPS >= u1) || (u1 <= u2 && v1 >= v2)) return true;
    return false;
}

int main(void) {
    cin >> a >> b;
    cin >> c >> d;
    double l = 0, r = max(max(abs(a), abs(b)), max(abs(c), abs(d)));
    //can(0.0);
    //return 0;
    int cnt = 0;
    while (r - l > EPS) {
        ++cnt;
        if (cnt > 5e6)
            break;
        double mid = (l + r) / 2;
//      printf("%lf - %lf\n", l, r);
        if (can(mid))
            r = mid;
        else
            l = mid;
    }
    printf("%.10lf\n", l);
    return 0;
}


/***********************************
*                                  *
*    Auther Rhapsody               *
*    E-mail addf400@foxmail.com    *
*                                  *
***********************************/
#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

typedef long long LL;

const int N = 1e5 + 7;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-10;

int a, b, c, d;

inline bool can(double ans) {
    double x1 = a + ans, y1 = a - ans;
    double x2 = b + ans, y2 = b - ans;
    double x3 = c + ans, y3 = c - ans;
    double x4 = d + ans, y4 = d - ans;
    //cout << x1 << ' ' << y1 << endl;
    //cout << x2 << ' ' << y2 << endl;
    //cout << x3 << ' ' << y3 << endl;
    //cout << x4 << ' ' << y4 << endl;
    double u1 = x1 * x4, v1 = y1 * y4;
    double u2 = x3 * x2, v2 = y3 * y2;
    if (u1 > v1)
        swap(u1, v1);
    if (u2 > v2)
        swap(u2, v2);
    //cout << u1 << ' ' << v1 << endl;
    //cout << u2 << ' ' << v2 << endl;
    if ((u1 < u2 && v1 + EPS > u2) || (u1 > u2 && v2 + EPS > u1)) return true;
    return false;
}

int main(void) {
    cin >> a >> b;
    cin >> c >> d;
    double l = 0, r = max(max(a, b), max(c, d));
    //can(0.2);
    //return 0;
    int cnt = 0;
    while (r - l > EPS) {
        ++cnt;
        if (cnt > 5e6)
            break;
        double mid = (l + r) / 2;
        //printf("%lf - %lf\n", l, r);
        if (can(mid))
            r = mid;
        else
            l = mid;
    }
    printf("%.10lf\n", l);
    return 0;
}


/***********************************
*                                  *
*    Auther Rhapsody               *
*    E-mail addf400@foxmail.com    *
*                                  *
***********************************/
#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

typedef long long LL;

const int N = 1e5 + 7;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-10;

int a, b, c, d;

inline bool can(double ans) {
    double x1 = a + ans, y1 = a - ans;
    double x2 = b + ans, y2 = b - ans;
    double x3 = c + ans, y3 = c - ans;
    double x4 = d + ans, y4 = d - ans;
    double u1 = min(min(x1 * x4, x1 * y4), min(y1 * x4, y1 * y4)), v1 = max(max(x1 * x4, x1 * y4), max(y1 * x4, y1 * y4));
    double u2 = min(min(x2 * x3, x2 * y3), min(y2 * x3, y2 * y3)), v2 = max(max(x2 * x3, x2 * y3), max(y2 * x3, y2 * y3));
    if (u1 > v1)
        swap(u1, v1);
    if (u2 > v2)
        swap(u2, v2);
//  cout << u1 << ' ' << v1 << endl;
//  cout << u2 << ' ' << v2 << endl;
    if ((u1 <= u2 && v1 >= u2) || (u1 >= u2 && v2 >= u1) || (u1 <= u2 && v1 >= v2)) return true;
    return false;
}

int main(void) {
    cin >> a >> b;
    cin >> c >> d;
    double l = 0, r = max(max(abs(a), abs(b)), max(abs(c), abs(d)));
    //can(0.0);
    //return 0;
    int cnt = 0;
    while (r - l > EPS) {
        ++cnt;
        if (cnt > 5e6)
            break;
        double mid = (l + r) / 2;
//      printf("%lf - %lf\n", l, r);
        if (can(mid))
            r = mid;
        else
            l = mid;
    }
    printf("%.10lf\n", l);
    return 0;
}


/***********************************
*                                  *
*    Auther Rhapsody               *
*    E-mail addf400@foxmail.com    *
*                                  *
***********************************/
#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

typedef long long LL;

const int N = 1e5 + 7;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-10;

int a, b, c, d;

inline bool can(double ans) {
	double x1 = a + ans, y1 = a - ans;
	double x2 = b + ans, y2 = b - ans;
	double x3 = c + ans, y3 = c - ans;
	double x4 = d + ans, y4 = d - ans;
	//cout << x1 << ' ' << y1 << endl;
	//cout << x2 << ' ' << y2 << endl;
	//cout << x3 << ' ' << y3 << endl;
	//cout << x4 << ' ' << y4 << endl;
	double u1 = min(min(x1 * x4, x1 * y4), min(y1 * x4, y1 * y4)), v1 = max(max(x1 * x4, x1 * y4), max(y1 * x4, y1 * y4));
	double u2 = min(min(x2 * x3, x2 * y3), min(y2 * x3, y2 * y3)), v2 = max(max(x2 * x3, x2 * y3), max(y2 * x3, y2 * y3));
	if (u1 > v1)
		swap(u1, v1);
	if (u2 > v2)
		swap(u2, v2);
	//cout << u1 << ' ' << v1 << endl;
	//cout << u2 << ' ' << v2 << endl;
	if ((u1 < u2 && v1 + EPS > u2) || (u1 > u2 && v2 + EPS > u1) || (u1 < u2 && v1 > v2)) return true;
	return false;
}

int main(void) {
	cin >> a >> b;
	cin >> c >> d;
	double l = 0, r = max(max(abs(a), abs(b)), max(abs(c), abs(d)));
	//can(0.2);
	//return 0;
	int cnt = 0;
	while (r - l > EPS) {
		++cnt;
		if (cnt > 5e6)
			break;
		double mid = (l + r) / 2;
		//printf("%lf - %lf\n", l, r);
		if (can(mid))
			r = mid;
		else
			l = mid;
	}
	printf("%.10lf\n", l);
	return 0;
}


/***********************************
*                                  *
*    Auther Rhapsody               *
*    E-mail addf400@foxmail.com    *
*                                  *
***********************************/
#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

typedef long long LL;

const int N = 1e5 + 7;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-10;

int a, b, c, d;

inline bool can(double ans) {
    double x1 = a + ans, y1 = a - ans;
    double x2 = b + ans, y2 = b - ans;
    double x3 = c + ans, y3 = c - ans;
    double x4 = d + ans, y4 = d - ans;
    //cout << x1 << ' ' << y1 << endl;
    //cout << x2 << ' ' << y2 << endl;
    //cout << x3 << ' ' << y3 << endl;
    //cout << x4 << ' ' << y4 << endl;
    double u1 = x1 * x4, v1 = y1 * y4;
    double u2 = x3 * x2, v2 = y3 * y2;
    if (u1 > v1)
        swap(u1, v1);
    if (u2 > v2)
        swap(u2, v2);
    //cout << u1 << ' ' << v1 << endl;
    //cout << u2 << ' ' << v2 << endl;
    if ((u1 < u2 && v1 + EPS > u2) || (u1 > u2 && v2 + EPS > u1) || (u1 < u2 && v1 > v2)) return true;
    return false;
}

int main(void) {
    cin >> a >> b;
    cin >> c >> d;
    double l = 0, r = max(max(a, b), max(c, d));
    //can(0.2);
    //return 0;
    int cnt = 0;
    while (r - l > EPS) {
        ++cnt;
        if (cnt > 5e6)
            break;
        double mid = (l + r) / 2;
        //printf("%lf - %lf\n", l, r);
        if (can(mid))
            r = mid;
        else
            l = mid;
    }
    printf("%.10lf\n", l);
    return 0;
}


/***********************************
*                                  *
*    Auther Rhapsody               *
*    E-mail addf400@foxmail.com    *
*                                  *
***********************************/
#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

typedef long long LL;

const int N = 1e5 + 7;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-10;

int a, b, c, d;

inline bool can(double ans) {
    double x1 = a + ans, y1 = a - ans;
    double x2 = b + ans, y2 = b - ans;
    double x3 = c + ans, y3 = c - ans;
    double x4 = d + ans, y4 = d - ans;
    //cout << x1 << ' ' << y1 << endl;
    //cout << x2 << ' ' << y2 << endl;
    //cout << x3 << ' ' << y3 << endl;
    //cout << x4 << ' ' << y4 << endl;
    double u1 = min(min(x1 * x4, x1 * y4), min(y1 * x4, y1 * y4)), v1 = max(max(x1 * x4, x1 * y4), max(y1 * x4, y1 * y4));
    double u2 = min(min(x2 * x3, x2 * y3), min(y2 * x3, y2 * y3)), v2 = max(max(x2 * x3, x2 * y3), max(y2 * x3, y2 * y3));
    if (u1 > v1)
        swap(u1, v1);
    if (u2 > v2)
        swap(u2, v2);
    //cout << u1 << ' ' << v1 << endl;
    //cout << u2 << ' ' << v2 << endl;
    if ((u1 < u2 && v1 + EPS > u2) || (u1 > u2 && v2 + EPS > u1) || (u1 < u2 && v1 > v2)) return true;
    return false;
}

int main(void) {
    cin >> a >> b;
    cin >> c >> d;
    double l = 0, r = max(max(a, b), max(c, d));
    //can(0.2);
    //return 0;
    int cnt = 0;
    while (r - l > EPS) {
        ++cnt;
        if (cnt > 5e6)
            break;
        double mid = (l + r) / 2;
        //printf("%lf - %lf\n", l, r);
        if (can(mid))
            r = mid;
        else
            l = mid;
    }
    printf("%.10lf\n", l);
    return 0;
}


#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<vi> vvi;
typedef pair<int,int> pii;
typedef vector<pii > vii;
typedef vector<pair<int, pair<int, int> > > viii;
typedef pair<ll,ll> pll;
typedef vector<string> vs;
typedef vector<vii> vvii;

#define pb push_back
#define mp make_pair
#define X first
#define Y second
#define MEM(a,b) memset(a,(b),sizeof(a))
#define tr(c,it) for(typeof((c).begin()) it = (c).begin(); it != (c).end(); it++)
#define all(a) a.begin(),a.end()
#define loop(x,a,b) for(int (x) = (a);(x)<(b);(x)++)
#define rep(x,n)   for(int (x)=0;(x)<(n);(x)++)
#define present(c,x) ((c).find(x) != (c).end())
#define cpresent(c,x) (find(all(c),x) != (c).end())
#define ain(a,n) int ((a)[(n)]); for(int i=0; i<(n); i++) cin>>((a)[i])
#define md 1000000007
#define MAXN 200005

#define pr16

#ifdef pr16
  #define pr(x)                 cerr << #x << ": " << x << endl;
  #define pr2(x, y)             cerr << #x << ": " << x << " | " << #y << ": " << y << endl;
  #define pr3(x, y, z)          cerr << #x << ": " << x << " | " << #y << ": " << y << " | " << #z << ": " << z << endl;
  #define pr4(a, b, c, d)       cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << endl;
  #define pr5(a, b, c, d, e)    cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << endl;
  #define pr6(a, b, c, d, e, f) cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << " | " << #f << ": " << f << endl;
  #define prdd(a,r,c) for(int i=0;i<(r);i++) { for(int j = 0;j<(c);j++) cerr<<a[i][j]<<" "; cerr<<endl; } cerr<<endl;
  #define prc(a) tr(a, it) cerr<<*(it)<<" "; cerr<<endl
  #define pra(a,n) for(int i=0; i<(n); i++) cerr<<((a)[i])<<" "; cerr<<"\n"
  #define prdd(a,r,c) for(int i=0;i<(r);i++) { for(int j = 0;j<(c);j++) cerr<<a[i][j]<<" "; cerr<<endl; } cerr<<endl;
  #define prddd(a,x,y,z) for(int i=0;i<x;i++) {cerr<<"layer "<<i<<":\n";prdd(a[i],y,z)}

#else
  #define pr(x)
  #define pr2(x, y)
  #define pr3(x, y, z)
  #define pr4(a, b, c, d)
  #define pr5(a, b, c, d, e)
  #define pr6(a, b, c, d, e, f)
  #define tr(c,it)
  #define prc(a)
  #define pra(a,n)
  #define prdd(a, r, c)
  #define prddd(a,x,y,z)
#endif

double a,b,c,d;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>a>>b>>c>>d;

    double mx = 1e18;
    rep(bm,1<<4)
    {
      vi v;
      int bmc = bm;
      rep(j,4)
      {
        v.pb(bmc % 2);
        bmc /= 2;
        v[j] = v[j]*2 -1;
      }
      prc(v);
      int ac = a*v[0],bc = b*v[1],cc = c*v[2],dc = d*v[3];

      double x = abs(ac*dc-cc*bc)/abs(ac+bc+cc+dc + 1e-12);
      mx = min(x,mx);
    }
    cout<<fixed<<setprecision(12)<<mx<<"\n";
    return 0;
}


#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<vi> vvi;
typedef pair<int,int> pii;
typedef vector<pii > vii;
typedef vector<pair<int, pair<int, int> > > viii;
typedef pair<ll,ll> pll;
typedef vector<string> vs;
typedef vector<vii> vvii;

#define pb push_back
#define mp make_pair
#define X first
#define Y second
#define MEM(a,b) memset(a,(b),sizeof(a))
#define tr(c,it) for(typeof((c).begin()) it = (c).begin(); it != (c).end(); it++)
#define all(a) a.begin(),a.end()
#define loop(x,a,b) for(int (x) = (a);(x)<(b);(x)++)
#define rep(x,n)   for(int (x)=0;(x)<(n);(x)++)
#define present(c,x) ((c).find(x) != (c).end())
#define cpresent(c,x) (find(all(c),x) != (c).end())
#define ain(a,n) int ((a)[(n)]); for(int i=0; i<(n); i++) cin>>((a)[i])
#define md 1000000007
#define MAXN 200005

#define pr16

#ifdef pr16
  #define pr(x)                 cerr << #x << ": " << x << endl;
  #define pr2(x, y)             cerr << #x << ": " << x << " | " << #y << ": " << y << endl;
  #define pr3(x, y, z)          cerr << #x << ": " << x << " | " << #y << ": " << y << " | " << #z << ": " << z << endl;
  #define pr4(a, b, c, d)       cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << endl;
  #define pr5(a, b, c, d, e)    cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << endl;
  #define pr6(a, b, c, d, e, f) cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << " | " << #f << ": " << f << endl;
  #define prdd(a,r,c) for(int i=0;i<(r);i++) { for(int j = 0;j<(c);j++) cerr<<a[i][j]<<" "; cerr<<endl; } cerr<<endl;
  #define prc(a) tr(a, it) cerr<<*(it)<<" "; cerr<<endl
  #define pra(a,n) for(int i=0; i<(n); i++) cerr<<((a)[i])<<" "; cerr<<"\n"
  #define prdd(a,r,c) for(int i=0;i<(r);i++) { for(int j = 0;j<(c);j++) cerr<<a[i][j]<<" "; cerr<<endl; } cerr<<endl;
  #define prddd(a,x,y,z) for(int i=0;i<x;i++) {cerr<<"layer "<<i<<":\n";prdd(a[i],y,z)}

#else
  #define pr(x)
  #define pr2(x, y)
  #define pr3(x, y, z)
  #define pr4(a, b, c, d)
  #define pr5(a, b, c, d, e)
  #define pr6(a, b, c, d, e, f)
  #define tr(c,it)
  #define prc(a)
  #define pra(a,n)
  #define prdd(a, r, c)
  #define prddd(a,x,y,z)
#endif

double a,b,c,d;

int fn(double x)
{
    double mn = 1e18,mx = -1e18;
    rep(bm,16)
    {
        vi v;
        int bmc = bm;
        rep(i,4)
        {
            v.pb(bmc % 2);
            bmc /= 2;
        }
        rep(i,4)
            v[i] = v[i]*2-1;
        double tot = (v[0] * x + a)*(v[1] * x + d) - (v[2] * x + c) * (v[3] * x + b);
        mx = max(mx,tot);
        mn = min(mn,tot);
    }
    if(mx > -1e-20 and mn < 1e-20)
        return 1;
    return 0;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>a>>b>>c>>d;
    double l = 0,r = 1e18;

    while(r-l > 1e-10)
    {
        double m = (l+r)/2;
        if(fn(m) == 0)
            l = m;
        else
            r = m;
    }
    cout<<fixed<<setprecision(12)<<l<<"\n";
    return 0;
}


#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<vi> vvi;
typedef pair<int,int> pii;
typedef vector<pii > vii;
typedef vector<pair<int, pair<int, int> > > viii;
typedef pair<ll,ll> pll;
typedef vector<string> vs;
typedef vector<vii> vvii;

#define pb push_back
#define mp make_pair
#define X first
#define Y second
#define MEM(a,b) memset(a,(b),sizeof(a))
#define tr(c,it) for(typeof((c).begin()) it = (c).begin(); it != (c).end(); it++)
#define all(a) a.begin(),a.end()
#define loop(x,a,b) for(int (x) = (a);(x)<(b);(x)++)
#define rep(x,n)   for(int (x)=0;(x)<(n);(x)++)
#define present(c,x) ((c).find(x) != (c).end())
#define cpresent(c,x) (find(all(c),x) != (c).end())
#define ain(a,n) int ((a)[(n)]); for(int i=0; i<(n); i++) cin>>((a)[i])
#define md 1000000007
#define MAXN 200005

#define pr16

#ifdef pr16
  #define pr(x)                 cerr << #x << ": " << x << endl;
  #define pr2(x, y)             cerr << #x << ": " << x << " | " << #y << ": " << y << endl;
  #define pr3(x, y, z)          cerr << #x << ": " << x << " | " << #y << ": " << y << " | " << #z << ": " << z << endl;
  #define pr4(a, b, c, d)       cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << endl;
  #define pr5(a, b, c, d, e)    cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << endl;
  #define pr6(a, b, c, d, e, f) cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << " | " << #f << ": " << f << endl;
  #define prdd(a,r,c) for(int i=0;i<(r);i++) { for(int j = 0;j<(c);j++) cerr<<a[i][j]<<" "; cerr<<endl; } cerr<<endl;
  #define prc(a) tr(a, it) cerr<<*(it)<<" "; cerr<<endl
  #define pra(a,n) for(int i=0; i<(n); i++) cerr<<((a)[i])<<" "; cerr<<"\n"
  #define prdd(a,r,c) for(int i=0;i<(r);i++) { for(int j = 0;j<(c);j++) cerr<<a[i][j]<<" "; cerr<<endl; } cerr<<endl;
  #define prddd(a,x,y,z) for(int i=0;i<x;i++) {cerr<<"layer "<<i<<":\n";prdd(a[i],y,z)}

#else
  #define pr(x)
  #define pr2(x, y)
  #define pr3(x, y, z)
  #define pr4(a, b, c, d)
  #define pr5(a, b, c, d, e)
  #define pr6(a, b, c, d, e, f)
  #define tr(c,it)
  #define prc(a)
  #define pra(a,n)
  #define prdd(a, r, c)
  #define prddd(a,x,y,z)
#endif

double a,b,c,d;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>a>>b>>c>>d;
    double x = abs(a*d-c*b)/(abs(a+d)+abs(b+c) + 1e-9);
    double mx = 0;
    cout<<fixed<<setprecision(10)<<x<<"\n";
    return 0;
}


#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<vi> vvi;
typedef pair<int,int> pii;
typedef vector<pii > vii;
typedef vector<pair<int, pair<int, int> > > viii;
typedef pair<ll,ll> pll;
typedef vector<string> vs;
typedef vector<vii> vvii;

#define pb push_back
#define mp make_pair
#define X first
#define Y second
#define MEM(a,b) memset(a,(b),sizeof(a))
#define tr(c,it) for(typeof((c).begin()) it = (c).begin(); it != (c).end(); it++)
#define all(a) a.begin(),a.end()
#define loop(x,a,b) for(int (x) = (a);(x)<(b);(x)++)
#define rep(x,n)   for(int (x)=0;(x)<(n);(x)++)
#define present(c,x) ((c).find(x) != (c).end())
#define cpresent(c,x) (find(all(c),x) != (c).end())
#define ain(a,n) int ((a)[(n)]); for(int i=0; i<(n); i++) cin>>((a)[i])
#define md 1000000007
#define MAXN 200005

#define pr16

#ifdef pr16
  #define pr(x)                 cerr << #x << ": " << x << endl;
  #define pr2(x, y)             cerr << #x << ": " << x << " | " << #y << ": " << y << endl;
  #define pr3(x, y, z)          cerr << #x << ": " << x << " | " << #y << ": " << y << " | " << #z << ": " << z << endl;
  #define pr4(a, b, c, d)       cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << endl;
  #define pr5(a, b, c, d, e)    cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << endl;
  #define pr6(a, b, c, d, e, f) cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << " | " << #f << ": " << f << endl;
  #define prdd(a,r,c) for(int i=0;i<(r);i++) { for(int j = 0;j<(c);j++) cerr<<a[i][j]<<" "; cerr<<endl; } cerr<<endl;
  #define prc(a) tr(a, it) cerr<<*(it)<<" "; cerr<<endl
  #define pra(a,n) for(int i=0; i<(n); i++) cerr<<((a)[i])<<" "; cerr<<"\n"
  #define prdd(a,r,c) for(int i=0;i<(r);i++) { for(int j = 0;j<(c);j++) cerr<<a[i][j]<<" "; cerr<<endl; } cerr<<endl;
  #define prddd(a,x,y,z) for(int i=0;i<x;i++) {cerr<<"layer "<<i<<":\n";prdd(a[i],y,z)}

#else
  #define pr(x)
  #define pr2(x, y)
  #define pr3(x, y, z)
  #define pr4(a, b, c, d)
  #define pr5(a, b, c, d, e)
  #define pr6(a, b, c, d, e, f)
  #define tr(c,it)
  #define prc(a)
  #define pra(a,n)
  #define prdd(a, r, c)
  #define prddd(a,x,y,z)
#endif

long double a,b,c,d;

int fn(long double x)
{
    long double mn = 1e18,mx = -1e18;
    rep(bm,16)
    {
        vi v;
        int bmc = bm;
        rep(i,4)
        {
            v.pb(bmc % 2);
            bmc /= 2;
        }
        rep(i,4)
            v[i] = v[i]*2-1;
        long double tot = (v[0] * x + a)*(v[1] * x + d) - (v[2] * x + c) * (v[3] * x + b);
        mx = max(mx,tot);
        mn = min(mn,tot);
    }
    if(mx > -1e-10 and mn < 1e-10)
        return 1;
    return 0;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>a>>b>>c>>d;
    long double l = 0,r = 1e18;

    while(r-l > 1e-10)
    {
        // pr3(l,r,r-l);
        long double m = (l+r)/2;
        if(fn(m) == 0)
            l = m;
        else
            r = m;
    }
    cout<<fixed<<setprecision(12)<<l<<"\n";
    return 0;
}


#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<vi> vvi;
typedef pair<int,int> pii;
typedef vector<pii > vii;
typedef vector<pair<int, pair<int, int> > > viii;
typedef pair<ll,ll> pll;
typedef vector<string> vs;
typedef vector<vii> vvii;

#define pb push_back
#define mp make_pair
#define X first
#define Y second
#define MEM(a,b) memset(a,(b),sizeof(a))
#define tr(c,it) for(typeof((c).begin()) it = (c).begin(); it != (c).end(); it++)
#define all(a) a.begin(),a.end()
#define loop(x,a,b) for(int (x) = (a);(x)<(b);(x)++)
#define rep(x,n)   for(int (x)=0;(x)<(n);(x)++)
#define present(c,x) ((c).find(x) != (c).end())
#define cpresent(c,x) (find(all(c),x) != (c).end())
#define ain(a,n) int ((a)[(n)]); for(int i=0; i<(n); i++) cin>>((a)[i])
#define md 1000000007
#define MAXN 200005

#define pr16

#ifdef pr16
  #define pr(x)                 cerr << #x << ": " << x << endl;
  #define pr2(x, y)             cerr << #x << ": " << x << " | " << #y << ": " << y << endl;
  #define pr3(x, y, z)          cerr << #x << ": " << x << " | " << #y << ": " << y << " | " << #z << ": " << z << endl;
  #define pr4(a, b, c, d)       cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << endl;
  #define pr5(a, b, c, d, e)    cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << endl;
  #define pr6(a, b, c, d, e, f) cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << " | " << #f << ": " << f << endl;
  #define prdd(a,r,c) for(int i=0;i<(r);i++) { for(int j = 0;j<(c);j++) cerr<<a[i][j]<<" "; cerr<<endl; } cerr<<endl;
  #define prc(a) tr(a, it) cerr<<*(it)<<" "; cerr<<endl
  #define pra(a,n) for(int i=0; i<(n); i++) cerr<<((a)[i])<<" "; cerr<<"\n"
  #define prdd(a,r,c) for(int i=0;i<(r);i++) { for(int j = 0;j<(c);j++) cerr<<a[i][j]<<" "; cerr<<endl; } cerr<<endl;
  #define prddd(a,x,y,z) for(int i=0;i<x;i++) {cerr<<"layer "<<i<<":\n";prdd(a[i],y,z)}

#else
  #define pr(x)
  #define pr2(x, y)
  #define pr3(x, y, z)
  #define pr4(a, b, c, d)
  #define pr5(a, b, c, d, e)
  #define pr6(a, b, c, d, e, f)
  #define tr(c,it)
  #define prc(a)
  #define pra(a,n)
  #define prdd(a, r, c)
  #define prddd(a,x,y,z)
#endif

double a,b,c,d;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>a>>b>>c>>d;

    double mx = 1e18;
    rep(bm,1<<16)
    {
      vi v;
      int bmc = bm;
      rep(j,4)
      {
        v.pb(bmc % 2);
        bmc /= 2;
        v[j] = v[j]*2 -1;
      }
      double den = 1e-9;
      int ac = a*v[0],bc = b*v[1],cc = c*v[2],dc = d*v[3];

      double x = abs(ac*dc-cc*bc)/abs(ac+bc+cc+dc + 1e-9);
      mx = min(x,mx);
    }
    cout<<fixed<<setprecision(12)<<mx<<"\n";
    return 0;
}