// Slower C++ solution:
#include <bits/stdc++.h>

using namespace std;



#define FOR(i,a,b) for(int i = (a); i < (b); i++)

#define RFOR(i,b,a) for(int i = (b) - 1; i >= (a); i--)

#define ITER(it, a) for(typeof(a.begin()) it = a.begin(); it != a.end(); it++)

#define FILL(a, value) memset(a, value, sizeof(a))



#define SZ(a) (int) a.size()

#define ALL(a) a.begin(),a.end()

#define PB push_back

#define MP make_pair



typedef long long LL;

typedef vector<int> VI;

typedef pair<int, int> PII;



const double PI = acos(-1.0);

const LL INF = 1000 * 1000 * 1000 + 7;

const LL LINF = INF * (LL)INF;



const int MAX = 400400;



PII A[MAX];



VI v;

int get(int x)

{

	return lower_bound(ALL(v), x) - v.begin();

}



struct Fen

{

	int A[MAX];

	int n;



	void init(int n)

	{

		this->n = n;

		FOR (i, 0, n)

		{

			A[i] = -INF;

		}

	}



	void add(int x, int val)

	{

		for (; x < n; x = x | (x+1))

		{

			A[x] = max(A[x], val);

		}

	}



	int get(int x)

	{

		int res = -INF;

		for (; x >= 0; x = (x & (x + 1)) - 1)

		{

			res = max(res, A[x]);

		}

		return res;

	}

} F;



int main()

{

	//freopen("in.txt", "r", stdin);

	//ios::sync_with_stdio(false); cin.tie(0);



	int x1, y1, x2, y2;

	scanf("%d%d%d%d", &x1, &y1, &x2, &y2);

	int n;

	scanf("%d", &n);



	FOR (i, 0, n)

	{

		int x, y;

		scanf("%d%d", &x, &y);

		A[i] = MP(x, y);

	}



	if (x2 > x1)

	{

		FOR (i, 0, n)

		{

			A[i].first *= -1;

		}

		x1 *= -1;

		x2 *= -1;

	}



	if (y2 > y1)

	{

		FOR (i, 0, n)

		{

			A[i].second *= -1;

		}

		y1 *= -1;

		y2 *= -1;

	}



	int dx = abs(x1 - x2);

	int dy = abs(y1 - y2);



	double res = (dx + dy) * 100.;



	v.PB(x1);

	v.PB(y1);

	v.PB(x2);

	v.PB(y2);

	FOR (i, 0, n)

	{

		v.PB(A[i].first);

		v.PB(A[i].second);

	}



	sort(ALL(v));

	v.erase(unique(ALL(v)), v.end());



	x1 = get(x1);

	y1 = get(y1);

	x2 = get(x2);

	y2 = get(y2);

	FOR (i, 0, n)

	{

		A[i].first = get(A[i].first);

		A[i].second = get(A[i].second);

	}



	sort(A, A+n);



	F.init(SZ(v));



	F.add(y2, 0);



	FOR (i, 0, n)

	{

		if (A[i].first < x2) continue;

		if (A[i].first > x1) break;

		int v = F.get(A[i].second) + 1;

		F.add(A[i].second, v);

	}



	int cnt = F.get(y1);



	int a, b;



	//double sub = (20 - PI * 10 / 2) * cnt;

	//res -= sub;

	a = cnt;

	b = 0;



	if (cnt == min(dx, dy) + 1)

	{

		a--;

		b++;

	}



	res -= a * (20 - PI * 5);

	res += b * (PI*10 - 20);



	printf("%.15f\n", res);



}


// Faster C++ solution for the same problem (measured speedup: 5.061882010629354x):
#include<cstdio>

#include<cmath>

#include<algorithm>

int a[200001],b[200001],Sx,Sy,Tx,Ty,n,p[200001],f[200001],ans;

bool ok=1;

double res;

bool cmp(int x,int y){return a[x]<a[y];}

int Max(int x,int y){return x>y?x:y;}

int Min(int x,int y){return x<y?x:y;}

int main(){

	scanf("%d%d%d%d",&Sx,&Sy,&Tx,&Ty);

	scanf("%d",&n);

	for(int i=1;i<=n;++i)scanf("%d%d",a+i,b+i),p[i]=i;

	if(Sx>Tx)std::swap(Sx,Tx),std::swap(Sy,Ty);

	if(Sy>Ty){

		for(int i=1;i<=n;++i)b[i]=100000000-b[i];

		Sy=100000000-Sy;Ty=100000000-Ty;}

	std::sort(p+1,p+n+1,cmp);

	for(int i=1;i<=n;++i)if(a[p[i]]>=Sx&&b[p[i]]>=Sy&&a[p[i]]<=Tx&&b[p[i]]<=Ty){

		int k=std::lower_bound(f,f+ans,b[p[i]])-f;

		f[k]=b[p[i]];

		ans=Max(ans,k+1);

	}

	res=100.0*(Tx+Ty-Sx-Sy);

	res+=acos(-1)*5.0*ans-20.0*ans;

	if(Min(Tx-Sx,Ty-Sy)+1==ans)res+=acos(-1)*5;

	printf("%.15lf",res);

	return 0;

}