// Arup Guha
// 8/27/2021
// Alternate Solution to 2021 UCF Locals Qualifying Problem: Time to Eat

import java.util.*;

public class subs {

	final public static int INF = 1000000;
	
	public static void main(String[] args) {
	
		Scanner stdin = new Scanner(System.in);
		int r = stdin.nextInt();
		int c = stdin.nextInt();
		int maxS = stdin.nextInt();
		int n = stdin.nextInt();
		
		// Store locations, index 0 is hotel, index n+1 is contest.
		int[][] locs = new int[n+2][2];
		locs[0][0] = locs[0][1] = 1;
		locs[n+1][0] = r; locs[n+1][1] = c;
		
		// Read in sub-shops.
		for (int i=1; i<=n; i++) {
			locs[i][0] = stdin.nextInt();
			locs[i][1] = stdin.nextInt();
		}
		
		// Will do an adjacency array.
		int[][] adj = new int[n+2][n+2];
		for (int i=0; i<n+2; i++) 
			Arrays.fill(adj[i], INF);
		
		// Going old-school Floyd's...here we add edges if they are short enough.
		for (int i=0; i<n+2; i++)
			for (int j=0; j<n+2; j++)
				if (manhattan(locs[i], locs[j]) <= maxS)
					adj[i][j] = manhattan(locs[i], locs[j]);

		// This is Floyd's.
		for (int k=0; k<n+2; k++)
			for (int i=0; i<n+2; i++)
				for (int j=0; j<n+2; j++)
					adj[i][j] = Math.min(adj[i][j], adj[i][k]+adj[k][j]);
					
		// Ta da!
		System.out.println(adj[0][n+1]);
	}
	
	// Returns the Manhattan distance between pts a and b.
	public static int manhattan(int[] a, int[] b) {
		return Math.abs(a[0]-b[0]) + Math.abs(a[1]-b[1]);
	}
}
