#include <bits/stdc++.h>

//#include <ext/pb_ds/assoc_container.hpp> // Common file
//#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update

#define rep(i,n) for(i=1;i<=n;i++)
#define Rep(i,n) for(i=0;i<n;i++)
#define For(i,a,b) for(i=a;i<=b;i++)

#define pb(x) push_back(x)
#define sz(x) x.size()

#define mem(ara,val) memset(ara,val,sizeof(ara))
#define eps 1e-11

#define si(x) scanf("%d",&x)
#define sii(x,y) scanf("%d %d",&x,&y)
#define siii(x,y,z) scanf("%d %d %d",&x,&y,&z)
#define sl(x) scanf("%lld",&x)
#define sll(x,y) scanf("%lld %lld",&x,&y)
#define slll(x,y,z) scanf("%lld %lld %lld",&x,&y,&z)
#define ss(ch) scanf("%s",ch)
#define pi(x) printf("%d",x)
#define pii(x,y) printf("%d %d",x,y)
#define piii(x,y,z) printf("%d %d %d",x,y,z)
#define pl(x) printf("%lld",x)
#define pll(x,y) printf("%lld %lld",x,y)
#define plll(x,y,z) printf("%lld %lld %lld",x,y,z)
#define ps(ch) printf("%s",ch)
#define Afridi 0
#define NL printf("\n")
#define debug(x) printf("wow  %d !!\n",x)
#define Max 500005
#define INF (LL)1e18
#define mod 1000000007
#define un(x) x.erase( unique( x.begin() , x.end() ) , x.end() )
#define pii pair<int,int>
#define _mp make_pair

#define FI freopen("in.txt","r",stdin)

#define D(x) cout << #x << " = " << (x) << endl
#define DD(x,y) cout << #x << " = " << x << "   " << #y << " = " << y << endl

typedef long long LL;
typedef unsigned long long ULL;

using namespace std;


LL bigmod(LL b,LL p,LL m)
{
    if(p == 0)return 1;
    LL my = bigmod(b,p/2,m);
    my*=my;my%=m;
    if(p & 1)my*=b,my%=m;
    return my;
}
int setb(int n,int pos){return n=n | (1 << pos);}
int resb(int n,int pos){return n=n & ~(1 << pos);}
bool checkb(int n,int pos){return (bool)(n & (1 << pos));}

LL n;
struct info
{
	LL x,y;
	info() {}
	info(LL _x, LL _y) { x = _x; y = _y; }
	bool operator < ( const info &p ) const
	{
		return x < p.x;
	}
};
info st,ed,ara[Max];
long double cut = 5.0 * acos(-1.0);

bool isSameLine(info p,info a,info q)
{
	if( p.x == q.x ) return ( min(p.y,q.y) <= a.y && a.y <= max(p.y,q.y) );
	if( p.y == q.y ) return ( min(p.x,q.x) <= a.x && a.x <= max(p.x,q.x) );
	return 0;
}

void Print(long double x)
{
	printf("%.15f\n",(double)x);
}

void change()
{
	LL i;
	rep(i,n) ara[i].y = 100000000 - ara[i].y;
	st.y = 100000000 - st.y;
	ed.y = 100000000 - ed.y;
}

LL a[Max],N,dp[Max],c[Max];
LL bin(LL len,LL x)
{
	LL low = 1,high = len, mid, ans;
	if( len == 0 || x > c[len] ) return len + 1;
	while(low <= high)
	{
		mid = (low + high) / 2;
		LL my = c[mid];
		if( x <= my )
		{
			ans = mid;
			high = mid - 1;
		}
		else low = mid + 1;
	}
	return ans;
}

LL LIS()
{
	LL len = 0;
    for(LL i = 1; i <= N; i++)
    {
        LL k = bin(len,a[i]);
        c[k] = a[i];
        dp[i] = k;
        len = max(len,k);
    }
    return len;
}

void make()
{
	LL i;
    rep(i,n)
    {
		if( st.x <= ara[i].x && ara[i].x <= ed.x )
		{
			if( st.y <= ara[i].y && ara[i].y <= ed.y )
			{
				a[++N] = ara[i].y - st.y;
			}
		}
    }
}

int main()
{
	//FI;
	LL i,x,y;
    sll(x,y);
    st = info(x,y);
    sll(x,y);
    ed = info(x,y);
    if( st.x > ed.x ) swap(st,ed);
    sl(n);
    rep(i,n)
    {
		sll(x,y);
		ara[i] = info(x,y);
    }
    sort(ara+1,ara+n+1);

	///newly grid
    if( st.y > ed.y ) change();

	long double ret = fabs(st.x - ed.x) * 100 + fabs(st.y - ed.y) * 100;

	make();
	LL l = LIS();
	long double save = l * ( cut - 20 );
	if( min(ed.x-st.x,ed.y-st.y) + 1 == l ) save += cut;
	ret += save;
	Print(ret);
	return 0;
}


Measured memory_bytes: 16128