#include <vector>
#include <iomanip>
#include <iostream>
#include <algorithm>
using namespace std;
const int row = 100000000;
const int inf = 1012345678;
const long double magical_number = 4.2920367320510338076867830836025l;
const long double magical_number2 = 15.707963267948966192313216916398l;
int N, xa, ya, xb, yb, x[200009], y[200009];
int main() {
	ios::sync_with_stdio(false);
	cin >> xa >> ya >> xb >> yb >> N;
	for (int i = 0; i < N; i++) cin >> x[i] >> y[i];
	if (ya > yb) swap(ya, yb), swap(xa, xb);
	if (xa > xb) {
		xa = row - xa - 1; xb = row - xb - 1;
		for (int i = 0; i < N; i++) x[i] = row - x[i] - 1;
	}
	vector<pair<int, int> > v;
	for (int i = 0; i < N; i++) {
		if (xa <= x[i] && x[i] <= xb && ya <= y[i] && y[i] <= yb) {
			v.push_back(make_pair(x[i], y[i]));
		}
	}
	sort(v.begin(), v.end());
	vector<int> cp;
	for (int i = 0; i < v.size(); i++) cp.push_back(v[i].second);
	sort(cp.begin(), cp.end());
	vector<int> cr;
	for (int i = 0; i < v.size(); i++) cr.push_back(lower_bound(cp.begin(), cp.end(), v[i].second) - cp.begin());
	vector<int> res(N, inf);
	for (int i = 0; i < v.size(); i++) {
		*lower_bound(res.begin(), res.end(), cr[i]) = cr[i];
	}
	int ret = lower_bound(res.begin(), res.end(), inf) - res.begin();
	cout << fixed << setprecision(19) << (xb - xa) * 100L + (yb - ya) * 100LL - ret * magical_number + (xb - xa < ret || yb - ya < ret ? magical_number2 : 0) << endl;
	return 0;
}