#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <string>
#define maxn 20
using namespace std;
double pi = 3.1415926;
struct node {
double x;
double y;
double min_wall;
} a[maxn];
double dis[maxn][maxn];
int book[maxn] = {0};
int n;
double ans = 10000009;
double wall_x1, wall_x2, wall_y1, wall_y2;
double square;
double work_dis(double x1, double x2, double y1, double y2) {
return sqrt(abs(x1 - x2) * abs(x1 - x2) + abs(y1 - y2) * abs(y1 - y2));
}
double work_circle(double r) {
return (r * r * pi);
}
void dfs(int k, double sum) {
if (k > n) {
ans = min(ans, sum);
return;
}
for (int i = 0; i < n; i++) {
if (!book[i]) {
book[i] = 1;
double mi_dis = a[i].min_wall;
for (int j = 0; j < n; j++) {
if (j == i || book[j] == 1) {
continue;
}
if (dis[i][j] - mi_dis < 0) {
mi_dis = dis[i][j];
}
}
for (int j = 0; j < n; j++) {
if (j == i || book[j] == 1) {
continue;
}
dis[i][j] -= mi_dis;
dis[j][i] -= mi_dis;
if (dis[i][j] <= 0) {
book[j] = 2;
}
}
dfs(k + 1, sum - work_circle(mi_dis));
for (int j = 0; j < n; j++) {
if (j == i) {
continue;
}
if (book[j] == 2) {
dis[i][j] += mi_dis;
dis[j][i] += mi_dis;
if (dis[i][j] > 0) {
book[j] = 0;
}
} else {
continue;
}
}
book[i] = 0;
}
}
return;
}
int main() {
cin >> n;
cin >> wall_x1 >> wall_y1 >> wall_x2 >> wall_y2;
wall_x1 += 1000;
wall_x2 += 1000;
wall_y1 += 1000;
wall_y2 += 1000;
square = abs(wall_x1 - wall_x2) * abs(wall_y1 - wall_y2);
for (int i = 0; i < n; i++) {
cin >> a[i].x >> a[i].y;
a[i].x += 1000;
a[i].y += 1000;
double mi_x = min(abs(a[i].x - wall_x1), abs(a[i].x - wall_x2));
double mi_y = min(abs(a[i].y - wall_y1), abs(a[i].y - wall_y2));
a[i].min_wall = min(mi_x, mi_y);
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
dis[i][j] = work_dis(a[i].x, a[j].x, a[i].y, a[j].y);
}
}
dfs(1, square);
cout << round(ans);
return 0;
}