import math,string,itertools,fractions,heapq,collections,re,array,bisect,sys,random,time,copy,functools
sys.setrecursionlimit(10**7)
inf = 10**20
gosa = 1.0 / 10**10
mod = 998244353
def LI(): return [int(x) for x in sys.stdin.readline().split()]
def LI_(): return [int(x)-1 for x in sys.stdin.readline().split()]
def LF(): return [float(x) for x in sys.stdin.readline().split()]
def LS(): return sys.stdin.readline().split()
def I(): return int(sys.stdin.readline())
def F(): return float(sys.stdin.readline())
def S(): return input()
class Seg():
def __init__(self, n, default, func):
i = 1
while 2**i <= n:
i += 1
self.D = default
self.H = i
self.N = 2**i
self.A = [default] * (self.N*2-1)
self.F = func
def find(self, i):
return self.A[i + self.N - 1]
def update(self, i, x):
i += self.N - 1
self.A[i] = x
while i > 0:
i = (i-1) // 2
self.A[i] = self.merge(self.A[i*2+1], self.A[i*2+2])
def merge(self, a, b):
return self.F(a, b)
def total(self):
return self.A[0]
def query(self, a, b):
def _query(k,l,r):
if r <= a or b <= l:
return self.D
if a <= l and r <= b:
return self.A[k]
m = (l+r)//2
vl = _query(k*2+1,l,m)
vr = _query(k*2+2,m,r)
return self.merge(vl,vr)
return _query(0,0,self.N)
def main():
x1,y1,x2,y2 = LI()
n = I()
a = sorted([LI() for _ in range(n)])
if x1 > x2:
x1,y1,x2,y2 = x2,y2,x1,y1
yy1 = y1
yy2 = y2
if yy1 > yy2:
yy1,yy2 = yy2,yy1
def f(a,b):
if a>b:
return a
return b
s = Seg(n+2,0,f)
yf = y2 < y1
for x,y in a:
if x < x1:
continue
if x > x2:
continue
if y < yy1:
continue
if y > yy2:
continue
if yf:
y = n-y+1
t = s.query(0,y)
s.update(y,t+1)
r = (abs(x2-x1) + abs(y2-y1)) * 100
y = y2
if yf:
y = n-y2+1
k = 20 - 5 * math.pi
t = s.total()
r = r-t*k
if t > min(abs(x2-x1),abs(y1-y2)):
r += 5 * math.pi
return r
print(main())