#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
const double EPS = 1e-10;
typedef complex<double> P;
typedef pair<P,P> L;
namespace std {
  bool operator < (const P& a, const P& b) {
    return real(a)!=real(b)?real(a)<real(b):imag(a)<imag(b);
  }
}
double cross(const P& a, const P& b) {return imag(conj(a)*b);}
P crosspoint(const L &l, const L &m) {
  double A = cross(l.S - l.F, m.S - m.F);
  double B = cross(l.S - l.F, l.S - m.F);
  if (fabs(A) < EPS && fabs(B) < EPS) return m.F;
  return m.F + B / A * (m.S - m.F);
}
double area(vector<P> p) {
  double a=0;
  for(int i=0; i<(int)p.size(); i++) a+=cross(p[i],p[(i+1)%p.size()]);
  return fabs(a)/2;
}
int main() {
  int n;
  while(cin >> n && n) {
    L a[n+2],b[n+2];
    double c[n+2],d[n+2];
    for(int i=1; i<=n; i++) cin >> c[i];
    for(int i=1; i<=n; i++) cin >> d[i];
    c[0]=d[0]=0;
    c[n+1]=d[n+1]=1;
    for(int i=0; i<n+2; i++) a[i]=L(P(c[i],0),P(d[i],1));
    for(int i=1; i<=n; i++) cin >> c[i];
    for(int i=1; i<=n; i++) cin >> d[i];
    c[0]=d[0]=0;
    c[n+1]=d[n+1]=1;
    for(int i=0; i<n+2; i++) b[i]=L(P(0,c[i]),P(1,d[i]));
    P p[n+2][n+2];
    for(int i=0; i<n+2; i++) {
      for(int j=0; j<n+2; j++) p[i][j]=crosspoint(b[i],a[j]);
      sort(p[i],p[i]+n+2);
    }
    double ans=0;
    for(int i=0; i<n+1; i++) {
      for(int j=0; j<n+1; j++) {
        vector<P> v;
        v.push_back(p[i][j]);
        v.push_back(p[i][j+1]);
        v.push_back(p[i+1][j+1]);
        v.push_back(p[i+1][j]);
        ans=max(ans,area(v));
      }
    }
    printf("%.10f\n",ans);
  }
  return 0;
}