import Control.Arrow
import qualified Data.ByteString.Char8 as B
import qualified Data.Set as S
import Data.List
import Text.Printf

readInteger :: B.ByteString -> Integer
readInteger = maybe undefined fst . B.readInteger

readIntegerPair :: B.ByteString -> [(Integer, Integer)]
readIntegerPair = map (pair . map readInteger . B.words) . B.lines

pair :: [t] -> (t, t)
pair [x, y] = (x, y)
pair _ = undefined

main = do
  [x1,y1,x2,y2] <- (\[a,b,c,d] -> if a>c || b>d then [c,d,a,b] else [a,b,c,d]) . map read . words <$> getLine
  _ <- getLine
  xys <- readIntegerPair <$> B.getContents
  printf "%.12f" (walk x1 y1 x2 y2 xys :: Double)

walk x1 y1 x2 y2 xys = 100*s - (20 - 5*pi)*p + (10*pi - 20)*q
  where
    s = fromIntegral $ abs (x1-x2) + abs (y1-y2)
    k = genericLength $ lis $ map snd $ sort $ filter (\(x,y) -> x1<=x && x<=x2 && y1<=y && y<=y2) xys
    (p, q) = (fromIntegral *** fromIntegral) $ if k < min (abs (x1-x2)) (abs (y1-y2)) + 1 then (k, 0) else (k - 1, 1)

lis :: Ord a => [a] -> [a]
lis = S.toList . snd . foldl go (S.empty, S.empty)
  where
    go (acc, acc0) x = case S.lookupGT x acc of
      Nothing -> let acc1 = S.insert x acc in (acc1, acc1)
      Just g -> (S.insert x (S.delete g acc), acc0)