#include <cstdio>
#include <queue>
#include <algorithm>
#define X_MAX 500
#define Y_MAX 500
#define N_MAX 100000
#define V_MAX ((X_MAX + 1) * (Y_MAX + 1))
#define lld "%lld"
typedef long long lnt;
typedef bool bnt;
typedef void vnt;
const lnt LNF = 0x3F3F3F3F3F3F3FLL;
const int dx[] = {-1, 0, +1, 0}, dy[] = {0, -1, 0, +1};
int X, Y, N, i, k, x, y, u, v, sx, sy, tx, ty, Ql = -1, Qr = -1, Q[V_MAX * 2];
lnt A, B, C, dir[X_MAX + 1][Y_MAX + 1], dis[X_MAX + 1][Y_MAX + 1][3];
inline bnt chk(int x, int y) { return x >= 0 && x <= X && y >= 0 && y <= Y; }
struct dat
{
	int k, x, y; lnt d;
	bnt operator < (const dat & p) const { return d > p.d; }
} p;
std::priority_queue<dat> P;
int main()
{
	scanf("%d %d" lld lld lld "%d", &X, &Y, &A, &B, &C, &N);
	for (x = 0; x <= X; ++x)
		for (y = 0; y <= Y; ++y)
			dir[x][y] = -1;
	scanf("%d %d", &sx, &sy), dir[sx][sy] = 0;
	for (i = 2; i < N; ++i)
		scanf("%d %d", &x, &y), dir[x][y] = 0;
	scanf("%d %d", &tx, &ty), dir[tx][ty] = 0;
	for (x = 0; x <= X; ++x)
		for (y = 0; y <= Y; ++y)
			if (!dir[x][y])
				Q[++Qr] = x, Q[++Qr] = y;
	while (Ql < Qr)
	{
		x = Q[++Ql], y = Q[++Ql];
		for (k = 0; k < 4; ++k)
			if (chk(u = x + dx[k], v = y + dy[k]) && !~dir[u][v])
				dir[u][v] = dir[x][y] + C, Q[++Qr] = u, Q[++Qr] = v;
	}
	for (k = 0; k < 3; ++k)
		for (x = 0; x <= X; ++x)
			for (y = 0; y <= Y; ++y)
				dis[x][y][k] = LNF;
	P.push((dat) {2, sx, sy, 0});
	while (true)
	{
		p = P.top(), P.pop();
		if (dis[p.x][p.y][p.k] < LNF)
			continue;
		if (p.x == tx && p.y == ty)
			break;
		dis[p.x][p.y][p.k] = p.d;
		switch (p.k)
		{
		case 2:
			for (k = 0; k < 2; ++k)
				if (dis[p.x][p.y][k] == LNF)
					P.push((dat) {k, p.x, p.y, p.d + B});
			for (k = 0; k < 4; ++k)
				if (chk(u = p.x + dx[k], v = p.y + dy[k]) && dis[u][v][2] == LNF)
					P.push((dat) {p.k, u, v, p.d + C});
			break;
		default:
			if (dis[p.x][p.y][2] == LNF)
				P.push((dat) {2, p.x, p.y, p.d + dir[p.x][p.y]});
			for (k = p.k; k < 4; k += 2)
				if (chk(u = p.x + dx[k], v = p.y + dy[k]) && dis[u][v][p.k] == LNF)
					P.push((dat) {p.k, u, v, p.d + A});
		}
	}
	printf(lld "\n", p.d);
	return 0;
}