#include <cstdio>
#include <algorithm>
#include <cstring>
#include <ctime>
#include <cmath>

#define Rep(i, n) for (int i = 1; i <= n; i ++)
#define Rep0(i, n) for (int i = 0; i <= n; i ++)
#define RepG(i, x) for (int i = head[x]; i; i = edge[i].next)
#define v edge[i].to
#define mp(a, b) make_pair(a, b)

using namespace std;

typedef double D;
const int N = 200010;
const D pi = acos(-1);

struct A{ int x, y;} a[N], a0[N], q[N];

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

int main()
{
	int x1, y1, x2, y2, n;
	scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
	scanf("%d", &n);
	Rep(i, n) scanf("%d%d", &a[i].x, &a[i].y);
	if (x1 > x2) {
		Rep(i, n) a[i].x = 1e8 - a[i].x;
		x1 = 1e8 - x1, x2 = 1e8 - x2;
	}
	if (y1 > y2) {
		Rep(i, n) a[i].y = 1e8 - a[i].y;
		y1 = 1e8 - y1, y2 = 1e8 - y2;
	}
	int cnt = 0;
	Rep(i, n) if (a[i].x >= x1 && a[i].x <= x2 && a[i].y >= y1 && a[i].y <= y2) a0[++ cnt] = a[i];
	
	sort(a0 + 1, a0 + 1 + cnt, cmp);
	
	int ta = 0;
	
	Rep(i, cnt) {
		int l = 1, r = ta + 1;
		while (l < r) {
			int mid = (l + r) >> 1;
			if (q[mid].y > a0[i].y) r = mid;
			else l = mid + 1;
		}
		q[l] = a0[i], ta = max(ta, l);
	}
	D ans = (x2 - x1 + y2 - y1) * 100.0 + ta * (5 * pi - 20);
	if (ta == min(x2 - x1, y2 - y1) + 1) ans += 5 * pi; 
	
	printf("%.12lf\n", ans);
	
	return 0;
}
