/*
a[i] = (a[i-1]+a[i+1])/2-c[i];
(a[i]+c[i])*2=a[i-1]+a[i+1]
a[i+1]= (a[i]+c[i])*2-a[i-1];
a[i] = (a[i-1]+c[i-1])*2-a[i-2]
a[2] = (a[1]+c[1])*2-a[0] = 2*a[1]-a[0]+2*c[1]
a[3] = (a[2]+c[2])*2-a[1] = ( (a[1]+c[1])*2-a[0]+c[2] )*2-a[1] =
= 4*(a[1]+c[1])-2*a[0]+2*c[2]-a[1]
= 3*a[1]-2*a[0]+2*c[2]+4*c[1]
a[4] = (a[3]+c[3])*2-a[2] =
*/
// include file
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cctype>
#include <ctime>
#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <bitset>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <set>
#include <list>
#include <functional>
using namespace std;
// typedef
typedef __int64 LL;
//
#define read freopen("in.txt","r",stdin)
#define write freopen("out.txt","w",stdout)
#define Z(a,b) ((a)<<(b))
#define Y(a,b) ((a)>>(b))
const double eps = 1e-6;
const double INFf = 1e100;
const int INFi = 1000000000;
const LL INFll = (LL)1<<62;
const double Pi = acos(-1.0);
template<class T> inline T sqr(T a){return a*a;}
template<class T> inline T TMAX(T x,T y)
{
if(x>y) return x;
return y;
}
template<class T> inline T TMIN(T x,T y)
{
if(x<y) return x;
return y;
}
template<class T> inline T MMAX(T x,T y,T z)
{
return TMAX(TMAX(x,y),z);
}
template<class T> inline T MMIN(T x,T y,T z)
{
return TMIN(TMIN(x,y),z);
}
template<class T> inline void SWAP(T &x,T &y)
{
T t = x;
x = y;
y = t;
}
// code begin
int n;
double a0,anplus1;
double c[3010];
int main()
{
read;
write;
while(scanf("%d",&n)==1)
{
scanf("%lf %lf",&a0,&anplus1);
for(int i=1;i<=n;i++)
scanf("%lf",c+i);
double a[2],b[2],t[2];
a[0] = 2;
a[1] = -a0+2*c[1];
if(n==1)
{
printf("%.2f\n",(anplus1-a[1])/a[0]);
continue;
}
b[0] = 3;
b[1] = -2*a0+2*c[2]+4*c[1];
if(n==2)
{
printf("%.2f\n",(anplus1-b[1])/b[0]);
continue;
}
for(int i=4;i<=n+1;i++)
{
t[0] = b[0]*2-a[0];
t[1] = (b[1]+c[i-1])*2-a[1];
a[0] = b[0];
a[1] = b[1];
b[0] = t[0];
b[1] = t[1];
}
printf("%.2f\n",(anplus1-t[1])/t[0]);
//
}
return 0;
}