// Arup Guha
// 5/10/2018
// Solution to USACO 2014 December Silver Problem: Piggyback

import java.util.*;
import java.io.*;

public class piggyback {

	public static int n;
	public static ArrayList[] g;

	public static void main(String[] args) throws Exception {

		// Read in data.
		BufferedReader stdin = new BufferedReader(new FileReader("piggyback.in"));
		StringTokenizer tok = new StringTokenizer(stdin.readLine());
		int bessie = Integer.parseInt(tok.nextToken());
		int elsie = Integer.parseInt(tok.nextToken());
		int piggy = Integer.parseInt(tok.nextToken());
		n = Integer.parseInt(tok.nextToken());
		g = new ArrayList[n];
		for (int i=0; i<n; i++) g[i] = new ArrayList<Integer>();

		// Read in graph.
		int numE = Integer.parseInt(tok.nextToken());
		for (int i=0; i<numE; i++) {
			tok = new StringTokenizer(stdin.readLine());
			int v1 = Integer.parseInt(tok.nextToken())-1;
			int v2 = Integer.parseInt(tok.nextToken())-1;
			g[v1].add(v2);
			g[v2].add(v1);
		}

		// Run 3 BFSs from each point of interest.
		int[] bDist = bfs(0);
		int[] eDist = bfs(1);
		int[] dDist = bfs(n-1);

		// This is a safe initial value; no piggybacking.
		int res = bessie*bDist[n-1] + elsie*eDist[n-1];

		// Try mid as the location where bessie and elsie meet.
		for (int mid=0; mid<n-1; mid++) {

			// Not allowed, if this place is unreachable from any of these.
			if (bDist[mid] == -1 || eDist[mid] == -1 || dDist[mid] == -1) continue;

			// See if meeting at vertex mid helps.
			res = Math.min(res, bessie*bDist[mid] + elsie*eDist[mid] + piggy*dDist[mid]);
		}

		// Write result.
		PrintWriter out = new PrintWriter(new FileWriter("piggyback.out"));
		out.println(res);
		out.close();
		stdin.close();
	}

	// Runs a BFS from v and returns all distances. -1 indicates no path.
	public static int[] bfs(int v) {

		// Set up BFS.
		int[] dist = new int[n];
		Arrays.fill(dist, -1);
		dist[v] = 0;
		LinkedList<Integer> q = new LinkedList<Integer>();
		q.offer(v);

		// Run BFS.
		while (q.size() > 0) {

			// Get next item.
			int cur = q.poll();

			// Enqueue all of its unvisited neighbors, marking distance.
			for (Integer next: (ArrayList<Integer>)g[cur]) {
				if (dist[next] == -1) {
					dist[next] = dist[cur] + 1;
					q.offer(next);
				}
			}
		}

		// Ta da!
		return dist;
	}
}