#include <bits/stdc++.h>

#define F first
#define S second
#define x1 privet1
#define x2 privet2
#define y1 privet3
#define y2 privet4
#define left privet6
#define prev ppppp

using namespace std;
typedef long long ll;

const int max_n = 200011, log_n = 32, max_m = 111, mod = 1000000007, inf = 1000111222;
//const double M_PI = 3.141592653589793238462643383279502884197169399375105820974944592307816406286;
const int maxmax = 100000000;

struct node {
    node *l, *r;
    int val, tl, tr;
    node(int tll, int trr) {
        tl = tll;
        tr = trr;
        val = 0;
        l = r = NULL;
    }
    void add(int pos, int newval) {
        if (pos == tl && pos == tr) {
            val = newval;
            return;
        }
        int mid = (tl + tr) / 2;
        if (pos <= mid) {
            if (!l) {
                l = new node(tl, mid);
            }
            l->add(pos, newval);
        } else {
            if (!r) {
                r = new node(mid + 1, tr);
            }
            r->add(pos, newval);
        }
        if (l) val = max(val, l->val);
        if (r) val = max(val, r->val);
    }
    int get(int ll, int rr) {
        if (ll == tl && rr == tr) {
            return val;
        }
        int mid = (tl + tr) / 2;
        if (rr <= mid) {
            if (l) return l->get(ll, rr);
            else return 0;
        } else if (ll > mid) {
            if (r) return r->get(ll, rr);
            else return 0;
        }
        int ans = 0;
        if (l) ans = max(ans, l->get(ll, mid));
        if (r) ans = max(ans, r->get(mid + 1, rr));
        return ans;
    }
};

node *root = new node(0, maxmax);
vector<pair<int, int> > p;
int n, x, y, x1, y1;

bool is_in(int x, int y, int x1, int y1, int x2, int y2) {
    if (x1 > x2) swap(x1, x2);
    if (y1 > y2) swap(y1, y2);
    return x >= x1 && x <= x2 && y >= y1 && y <= y2;
}

int gcnt() {
    for (int i = 0; i < p.size(); ++i) {
        int res = root->get(0, p[i].S);
        root->add(p[i].S, res + 1);
    }
    return root->get(0, maxmax);
}

void rev() {
    if (x > x1) {
        for (int i = 0; i < p.size(); ++i) {
            //cout << x << " " << x1 << " " << p[i].F << " ";
            p[i].F = x1 + (x - p[i].F);
            //cout << p[i].F << endl;
        }
        swap(x, x1);
    }
    if (y > y1) {
        for (int i = 0; i < p.size(); ++i) {
            p[i].S = y1 + (y - p[i].S);
        }
        swap(y, y1);
    }
}

int main() {
    //freopen("input.txt", "r", stdin);
    cin >> x >> y >> x1 >> y1 >> n;
    for (int i = 0; i < n; ++i) {
        int f, g;
        cin >> f >> g;
        if (is_in(f, g, x, y, x1, y1)) {
            p.push_back(make_pair(f, g));
        }
    }
    rev();
    sort(p.begin(), p.end());
    //for (int i = 0; i < p.size(); ++i) {
    //    cout << p[i].F << " " << p[i].S << endl;
    //}
    int cnt = gcnt();
    int cnt1 = 0;
    if (cnt == min(x1 - x + 1, y1 - y + 1)) {
        --cnt;
        cnt1 = 1;
    }
    //cout << cnt << " " << cnt1 << endl;
    long long tmp = 100LL * (x1 - x + y1 - y) - (cnt + cnt1) * 20;
    long double ans = tmp;
    ans += (long double)(cnt1) * 10.0 * M_PI;
    ans += (long double)(cnt) * 5.0 * M_PI;
    printf("%.17f", double(ans));
    return 0;
    int kk = (long long) ans % 10;
    if ((long long)(ans) >= 10) printf("%lld", (long long)(ans) / 10);
    ans = (long double)(cnt1) * 10.0 * M_PI + (long double)(cnt) * 5.0 * M_PI;
    ans = ans - floor(ans) + kk;
    //cout << ans << endl;
    printf("%.17f\n", double(ans));
    return 0;
}


Measured memory_bytes: 97136