#include<bits/stdc++.h>
using namespace std;
//p1378 油滴扩展
const double PI=3.1415926535;
bool s[10];		//判断点是否已经滴过了 
double x[10];	//x值 
double y[10];	//y值 
double r[10];	//该点半径 
double xa,xb,ya,yb,ansmax;	//矩形对角坐标,ansmax:油滴面积和的最大值 
int n;

double ban(int i){
   			//当前油滴的半径 
	double s1=min(abs(x[i]-xa),abs(x[i]-xb));//到x边界最小 
	double s2=min(abs(y[i]-ya),abs(y[i]-yb));//到y边界最小 
	double ans=min(s1,s2);						//到边界的最小值 
	for(int j=1;j<=n;j++){
   
		if(i!=j&&s[j]){
   							//该点以外的点 
			double d=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));	//到其他点的距离 
			ans=min(ans,max(d-r[j],0.0));									//所有距离中的最小值 
		}	
	}
	return ans;		//返回半径 
}

void dfs(int k,double sum){
   
	if(k>n){
   					//结束条件 
		ansmax=max(ansmax,sum);	//油滴面积和最大 
		return;
	}
	for(int i=1;i<=n;i++){
   		 
		if(!s[i]){
   				//没有找过的点 
			r[i]=ban(i);		//记录半径 
			s[i]=true;			//记录该点 
			dfs(k+1,sum+r[i]*r[i]*PI);	//深搜 
			s[i]=false;			//回溯 
		}
	}
}

int main(){
   
	double ss;
	cin>>n;
	cin>>xa>>ya>>xb>>yb;
	ss=abs(xa-xb)*abs(ya-yb);	//总面积 
	for(int i=1;i<=n;i++){
   
		cin>>x[i]>>y[i];
	}
	dfs(1,0);					//进入一个点,且面积为0 
	printf("%.0f",(ss-ansmax));	//四舍五入 
	
}