// Slower C++ solution:
#include <iostream>

#include <sstream>

#include <iomanip>

#include <cstdio>

#include <cstdlib>

#include <cmath>

#include <cctype>

#include <cstring>

#include <vector>

#include <list>

#include <queue>

#include <deque>

#include <stack>

#include <map>

#include <set>

#include <algorithm>

#include <iterator>

#include <bitset>

#include <ctime>

#include <complex>



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 unsigned long long LL;

typedef vector<int> VI;

typedef pair<int, int> PII;



const double PI = acos(-1.0);

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

const LL LINF = INF * (LL) INF;



const double EPS = 1e-6;

const int MAX = 2000 * 100 + 47;





PII A[MAX];

PII B[MAX];

int DP[MAX];



int main()

{

    int x, y, xx, yy;

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

    int n;

    scanf("%d", &n);

    FOR(i, 0, n)

        scanf("%d%d", &A[i].first, &A[i].second);

    

    if (x > xx)swap(x, xx), swap(y, yy);

    if (y > yy)

    {

        FOR(i, 0, n) A[i].second *= -1;

        y *= -1, yy *= -1;

    }

    int sz = 0;

    FOR(i, 0, n)

    {

        if (A[i].first < x || A[i].first > xx)continue;

        if (A[i].second < y || A[i].second > yy)continue;

        B[sz++] = A[i];

    }

    sort(B, B + sz);

    FOR(i, 0, MAX)

        DP[i] = INF;

    int mx = 0;

    FOR(i, 0, sz)

    {

        int j = lower_bound(DP, DP + n, B[i].second) - DP;

        DP[j] = B[i].second;

        mx = max(mx, j+1);

    }

    double ans = (xx - x) + (yy - y);

    ans *= 100;

    if (mx == xx - x + 1 || mx == yy - y + 1)ans += 5 * PI;

    ans += mx * (5 * PI - 20);

    printf("%.11f\n", ans);

}


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

#include<algorithm>

#include<cstdio>

#include<cmath>

using namespace std;

const double PI=acos(-1);

struct xxx{int x,y;}d[201000];

int a[201000],s[201000];

bool cmp(xxx a,xxx b){return a.x<b.x;}

int LIS1(int n)

{

	int sz=0;

	for(int i=1;i<=n;i++)

	{

		if(sz==0||a[i]>s[sz])s[++sz]=a[i];

		else

		{

			int l=1,r=sz+1;

			while(l<r)

			{

				int mid=(l+r)>>1;

				if(s[mid]<a[i])l=mid+1;

				else r=mid;

			}

			s[r]=a[i];

		}

	}

	return sz;

}

int LIS2(int n)

{

	int sz=0;

	for(int i=1;i<=n;i++)

	{

		if(sz==0||a[i]<s[sz])s[++sz]=a[i];

		else

		{

			int l=1,r=sz+1;

			while(l<r)

			{

				int mid=(l+r)>>1;

				if(s[mid]>a[i])l=mid+1;

				else r=mid;

			}

			s[r]=a[i];

		}

	}

	return sz;

}

int main()

{

	int sx,sy,tx,ty;scanf("%d%d%d%d",&sx,&sy,&tx,&ty);bool ok=0;

	if(sx>tx)swap(sx,tx),swap(sy,ty);if(sy>ty)ok=1;

	int n;scanf("%d",&n);

	for(int i=1;i<=n;i++){int X,Y;scanf("%d%d",&X,&Y);d[i].x=X;d[i].y=Y;}

	sort(d+1,d+n+1,cmp);int cnt=0;//for(int i=1;i<=n;i++)cout<<d[i].x<<" "<<d[i].y<<endl;

	for(int i=1;i<=n;i++)if(d[i].x<sx||d[i].x>tx||d[i].y<min(sy,ty)||d[i].y>max(sy,ty))continue;else a[++cnt]=d[i].y;

//	for(int i=1;i<=cnt;i++)cout<<a[i];

	int sz=0;if(ok==0)sz=LIS1(cnt);else sz=LIS2(cnt);

	long long ans1=1ll*(tx-sx+max(sy,ty)-min(sy,ty))*100ll,ans2=0;

	if(sz==min(tx-sx,max(sy,ty)-min(sy,ty))+1)ans2+=5;

	ans2+=sz*5;ans1-=sz*20;

	printf("%.15lf",(double)ans1+(double)ans2*PI);

	return 0;

}