/// c.cpp
# include <stdio.h>
# include <bits/stdc++.h>
using namespace std;
const pair < int , int > DD[] = {{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};
# define fi cin
# define fo cout
# define x first
# define y second
# define ll long long
# define IOS ios_base :: sync_with_stdio(0);cin.tie(0)
# define p(v) cerr << #v << " = " << v << '\n'
# define p2(v) cerr << #v << " = " << (complex < decltype(v.x) > (v.x,v.y)) << '\n'
# define vi vector < int >
# define vl vector < ll >
# define pll pair < ll , ll >
# define pii pair < int , int >
# define mp make_pair
# define db long double
# define fail puts("-1")
# define yes puts("YES")
# define no puts("NO")
# define PP puts("Possible")
# define II puts("Impossible")
# define vii vector < pii >
# define vll vector < pll >
# define pb push_back
# define pdd pair < db , db >
# define all(s) s.begin(),s.end()
template < class T > T smin(T &a,T b) {if (a > b) a = b;return a;}
template < class T > T smax(T &a,T b) {if (a < b) a = b;return a;}
inline int readChar();
template <class T = int> inline T readInt();
template <class T> inline void writeInt( T x, char end = 0 );
inline void writeChar( int x );
inline void writeWord( const char *s );
int main(void)
{
    # define int ll
    #ifdef CF
    freopen("input","r",stdin);
    #endif // CF
    srand(__rdtsc());
    fo << fixed << setprecision(13);
    cerr << fixed << setprecision(13);
    int x1,y1,x2,y2;
    fi>>x1>>y1>>x2>>y2;
    if (mp(x1,y1) > mp(x2,y2))
        swap(x1,x2),swap(y1,y2);
    const db pi = acos(-1);
    int ok = 1;
    int n;
    fi>>n;
    vii ss;
    while (n--)
    {
        int xx,yy;
        fi>>xx>>yy;
        if (min(x1,x2) <= xx && xx <= max(x1,x2) && min(y1,y2) <= yy && yy <= max(y1,y2))
            ss.pb(mp(xx,yy));
    }
    sort(all(ss));
    n = ss.size();
    if (x1 == x2 || y1 == y2 || !n)
        return fo << (abs(x1 - x2) + abs(y1 - y2)) * 100.0 + (pi * 10 - 20) * (n != 0) << '\n',0;
    static int t[1 << 20];
    auto U = [&](int i,int v)
    {
        for (;i <= n;i += i&(-i))
            smax(t[i],v);
    };
    auto Q = [&](int i)
    {
        int ans = 0;
        for (;i;i -= i&(-i))
            smax(ans,t[i]);
        return ans;
    };
    vi s;
    for (int i = 0;i < n;++i)
        s.pb((y1 <= y2) ? ss[i].y : -ss[i].y);
    auto v = s;
    sort(all(s));
    s.resize(unique(all(s)) - s.begin());
    for (auto & it : v)
        it = lower_bound(all(s),it) - s.begin() + 1;
    for (auto it : v)
        U(it,Q(it) + 1);
    if (Q(n) != min(abs(x1 - x2),abs(y1 - y2)) + 1)
        fo << (abs(x1 - x2) + abs(y1 - y2)) * 100.0 - (Q(n)) * (4 - pi) * 5 << '\n';
    else
        fo << (abs(x1 - x2) + abs(y1 - y2)) * 100.0 - (Q(n) - 1) * (4 - pi) * 5 + (pi * 10 - 20) << '\n';
    cerr << "Time elapsed :" << clock() * 1000.0 / CLOCKS_PER_SEC << " ms" << '\n';
    # undef int
    return 0;
}
/** Read */

static const int buf_size = 4096;

inline int getChar()
{
    static char buf[buf_size];
    static int len = 0, pos = 0;
    if (pos == len)
        pos = 0, len = fread(buf, 1, buf_size, stdin);
    if (pos == len)
        return -1;
    return buf[pos++];
}

inline int readChar()
{
    int c = getChar();
    while (c <= 32)
        c = getChar();
    return c;
}

template <class T>
inline T readInt()
{
    int s = 1, c = readChar();
    T x = 0;
    if (c == '-')
        s = -1, c = getChar();
    while ('0' <= c && c <= '9')
        x = x * 10 + c - '0', c = getChar();
    return s == 1 ? x : -x;
}

/** Write */

static int write_pos = 0;
static char write_buf[buf_size];

inline void writeChar( int x )
{
    if (write_pos == buf_size)
        fwrite(write_buf, 1, buf_size, stdout), write_pos = 0;
    write_buf[write_pos++] = x;
}

template <class T>
inline void writeInt( T x, char end )
{
    if (x < 0)
        writeChar('-'), x = -x;

    char s[24];
    int n = 0;
    while (x || !n)
        s[n++] = '0' + x % 10, x /= 10;
    while (n--)
        writeChar(s[n]);
    if (end)
        writeChar(end);
}

inline void writeWord( const char *s )
{
    while (*s)
        writeChar(*s++);
}

struct Flusher
{
    ~Flusher()
    {
        if (write_pos)
            fwrite(write_buf, 1, write_pos, stdout), write_pos = 0;
    }
} flusher;


Measured memory_bytes: 10092