#include <bits/stdc++.h>

#define ll long long int

#define pb push_back
#define mp make_pair
#define F first
#define S second
#define fast_io std::ios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL)


#define trace(x) cout << '>' << #x << ':' << x << endl;
#define trace2(x,y) cout<< '>' << #x << ':' << x << " | " << #y << ':' << y << endl;
#define trace3(x,y,z) cout<< '>' << #x << ':' << x << " | " << #y << ':' << y <<" | " << #z << ':' << z << endl;
#define trace4(x,y,z,w) cout<< '>' << #x << ':' << x << " | " << #y << ':' << y <<" | " << #z << ':' << z << " | " << #w << ':' << w << endl;
#define REP(i,n) for(ll i=0;i<(n);i++)
#define FOR(i,a,b) for(ll i=(a);i<=(b);i++)
#define FORD(i,a,b) for(ll i=(a);i>=(b);i--)
#define all(v) (v).begin(),(v).end()

using namespace std;
///////////////////////////////////////////////////////

const long double PI = 3.141592653589793;


int N;
vector< pair<int,int> > fountain;


int CeilIndexLess(std::vector<int> &v, int l, int r, int key) {
    while (r-l > 1) {
    int m = l + (r-l)/2;
    if (v[m] >= key)
        r = m;
    else
        l = m;
    }
 
    return r;
}
 
int LongestIncreasingSubsequenceLengthLess(std::vector< pair<int,int> > &v) {
    if (v.size() == 0)
        return 0;
 
    std::vector<int> tail(v.size(), 0);
    int length = 1; // always points empty slot in tail
 
    tail[0] = v[0].S;
    for (size_t i = 1; i < v.size(); i++) {
        if (v[i].S < tail[0])
            // new smallest value
            tail[0] = v[i].S;
        else if (v[i].S > tail[length-1])
            // v[i] extends largest subsequence
            tail[length++] = v[i].S;
        else
            // v[i] will become end candidate of an existing subsequence or
            // Throw away larger elements in all LIS, to make room for upcoming grater elements than v[i]
            // (and also, v[i] would have already appeared in one of LIS, identify the location and replace it)
            tail[CeilIndexLess(tail, -1, length-1, v[i].S)] = v[i].S;
    }
 
    return length;
}


int CeilIndexGreat(std::vector<int> &v, int l, int r, int key) {
    while (r-l > 1) {
    int m = l + (r-l)/2;
    if (v[m] <= key)
        r = m;
    else
        l = m;
    }
 
    return r;
}
 
int LongestIncreasingSubsequenceLengthGreat(std::vector< pair<int,int> > &v) {
    if (v.size() == 0)
        return 0;
 
    std::vector<int> tail(v.size(), 0);
    int length = 1; // always points empty slot in tail
 
    tail[0] = v[0].S;
    for (size_t i = 1; i < v.size(); i++) {
        if (v[i].S > tail[0])
            // new smallest value
            tail[0] = v[i].S;
        else if (v[i].S < tail[length-1])
            // v[i] extends largest subsequence
            tail[length++] = v[i].S;
        else
            // v[i] will become end candidate of an existing subsequence or
            // Throw away larger elements in all LIS, to make room for upcoming grater elements than v[i]
            // (and also, v[i] would have already appeared in one of LIS, identify the location and replace it)
            tail[CeilIndexGreat(tail, -1, length-1, v[i].S)] = v[i].S;
    }
 
    return length;
}



int main()
{
	fast_io;

	int x1,y1,x2,y2;

	cin>>x1>>y1>>x2>>y2;
	cin>>N;

	if(x1==x2 and y1==y2){
		cout<<0<<endl;
		return 0;
	}

	if(x1>x2){
		int temp = x1;
		x1 = x2;
		x2 = temp;
		temp = y1;
		y1 = y2;
		y2 = temp;
	}

	// trace2(x1,x2);
	// trace2(y1,y2);

	FOR(i,1,N){
		int a,b; cin>>a>>b;

		// trace2(a,b);

		if(x1<=a and a<=x2){
			if((y1<=b and b<=y2) or (y2<=b and b<=y1)){
				// trace3("HI",a,b);
				fountain.pb(mp(a,b));
			}
		}
	}

	if(fountain.size() == 0){
		cout<<100.0*(abs(x1-x2)+abs(y1-y2))<<endl;
		return 0;
	}

	sort(all(fountain));

	int l;
	if(y1<y2){
		l = LongestIncreasingSubsequenceLengthLess(fountain);
	}
	else{
		l = LongestIncreasingSubsequenceLengthGreat(fountain);
	}

	

	int lim = min( abs(x1-x2) , abs(y1-y2) ) + 1;

	// trace2(l,lim);

	long double ans = 0;
	if(l<lim){
		ans = 100.0*(abs(x1-x2) + abs(y1-y2)) - 2.0*l*10 + l*PI*10/2;
	}
	else{
		ans = 100.0*(abs(x1-x2) + abs(y1-y2)) - 2.0*l*10 + (l+1)*PI*10/2;
	}

	cout<<setprecision(100);
	cout<<ans<<endl;

	return 0;


}


Measured memory_bytes: 2672