#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define ld long double
#define mod 1000000007
#define eps 1e-13
#define PI 3.141592653589793238L
#define INF 1000000011
#define INFLL 1000000000000000011LL
#define vi vector<int>
#define vll vector<long long>
#define pii pair<int, int>
#define pll pair<long long, long long>
#define pil pair<int, long long>
#define pli pair<long long, int>
#define mp make_pair
#define F first
#define S second
#define pb push_back
#define fo(i,a,n) for(i = (a); i < (n); i++)
#define gtl(x) getline(cin, (x))
#define flsh fflush(stdout)
#define sws ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)
#define gcd __gcd
#define all(a) (a).begin(), (a).end()
#define sz(a) (int)((a).size())
#define io_file freopen("D:/Coding Problems/Contest/input_file.in", "r", stdin); freopen("D:/Coding Problems/Contest/output_file.out", "w", stdout)

ll modx(ll Base, ll exponent)
{
	ll ans = 1;
	if(Base == 1)
		return Base;
	while(exponent)
	{
		if(exponent & 1)
			ans = (ans * Base)%mod;
		Base = (Base * Base)%mod;
		exponent = exponent >> 1;
	}
	return ans;
}

ll inmodx(ll num)
{
	return (modx(num, mod-2LL));
}

bool cmp(pair < vi, int > a, pair < vi, int > b)//true for a before b
{
	if(a.F.empty())
		return 1;
	if(b.F.empty())
		return 0;
	int i;
	fo(i,0,min(sz(a.F),sz(b.F)))
	{
		if(a.F[i] < b.F[i])
			return 1;
		else if(a.F[i] > b.F[i])
			return 0;
	}
	return (sz(a.F) <= sz(b.F));
}

const int N = (2e5) + 9;
const int M = (N<<2) + 9;
const int LOGN = ((int)log2(N)) + 3;
const int LOGM = ((int)log2(M)) + 3;
const int BUCK = 900;
const int SQRT = BUCK+9;

const int MAX = 100000000;
pii a[N];
vector < pii > arr;
vi diffy;
map < int, int > mapy;
int BIT[N], cnt;

void update(int x, int val)
{
	for(; x <= cnt; x+=(x&-x))
		BIT[x] = max(BIT[x],val);
	return;
}

int query(int x)
{
	int ans = 0;
	for(; x > 0; x-=(x&-x))
		ans = max(ans, BIT[x]);
	return ans;
}

void solve()
{
	int n, i, x1, y1, x2, y2, A = 0, B = 0, val;
	double ans;
	cin >> x1 >> y1 >> x2 >> y2;
	cin >> n;
	fo(i,1,n+1)
		cin >> a[i].F >> a[i].S;
	if(x1 > x2)
	{
		x1 = MAX-1-x1;
		x2 = MAX-1-x2;
		fo(i,1,n+1)
			a[i].F = MAX-1-a[i].F;
	}
	if(y1 > y2)
	{
		y1 = MAX-1-y1;
		y2 = MAX-1-y2;
		fo(i,1,n+1)
			a[i].S = MAX-1-a[i].S;
	}
	A = x2-x1 + y2-y1;
	arr.pb({-1,-1});
	diffy.pb(-1);
	fo(i,1,n+1)
		if(a[i].F >= x1 && a[i].F <= x2 && a[i].S >= y1 && a[i].S <= y2)
		{
			diffy.pb(a[i].S);
			arr.pb(a[i]);
		}
	cnt = sz(diffy)-1;
	sort(all(arr));
	sort(all(diffy));
	fo(i,1,cnt+1)
		mapy[diffy[i]] = i;
	fo(i,1,sz(arr))
	{
		val = query(mapy[arr[i].S])+1;
		B = max(B, val);
		update(mapy[arr[i].S],val);
	}
	cerr << A << " " << B << " " << cnt << '\n';
	cerr << x1 << "," << y1 << " " << x2 << "," << y2 << '\n';
	if(B < x2-x1+1 && B < y2-y1+1)
		ans = 100.0*A + (5.0*PI - 20.0)*B;
	else
		ans = 100.0*A + (5.0*PI - 20.0)*B + 5.0*PI;
	cout << ans << '\n';
	return;
}

int main()
{
	sws;
	clock_t clk;
	clk = clock();
	// io_file;
	// srand (time(NULL));

	//Code here
	int t = 1, cs;
	cout << fixed << setprecision(15);
	// cin >> t;
	fo(cs,1,t+1)
	{
		// cout << "Case #" << cs << ": ";
		solve();
	}
	// Code ends here

	clk = clock() - clk;
	cerr << fixed << setprecision(6) << "Time: " << ((double)clk)/CLOCKS_PER_SEC << "\n";
	return 0;
}

Measured memory_bytes: 14824