source_code: import java.util.*;
  import java.io.*;
  
  public class A {
  	FastScanner in;
  	PrintWriter out;
  	boolean systemIO = true;
  
  	public static void quickSort(int[] a, int from, int to) {
  		if (to - from <= 1) {
  			return;
  		}
  		int i = from;
  		int j = to - 1;
  		int x = a[from + (new Random()).nextInt(to - from)];
  		while (i <= j) {
  			while (a[i] < x) {
  				i++;
  			}
  			while (a[j] > x) {
  				j--;
  			}
  			if (i <= j) {
  				int t = a[i];
  				a[i] = a[j];
  				a[j] = t;
  				i++;
  				j--;
  			}
  		}
  		quickSort(a, from, j + 1);
  		quickSort(a, j + 1, to);
  	}
  
  	
  
  	public void solve() {
  		int n = in.nextInt();
  		HashSet<Long> ans = new HashSet<>();
  		Long d = in.nextLong();
  		long[] a = new long[n];
  		for (int i = 0; i < a.length; i++) {
  			a[i] = in.nextInt();
  		}
  		for (int i = 0; i < a.length; i++) {
  			long x = a[i] - d;
  			boolean flag = true;
  			for (int j = 0; j < a.length; j++) {
  				if (Math.abs(a[j] - x) < d) {
  					flag = false;
  					break;
  				}
  			}
  			if (flag) {
  				ans.add(x);
  			}
  			x = a[i] + d;
  			flag = true;
  			for (int j = 0; j < a.length; j++) {
  				if (Math.abs(a[j] - x) < d) {
  					flag = false;
  					break;
  				}
  			}
  			if (flag) {
  				ans.add(x);
  			}
  		}
  		out.println(ans.size());
  	}
  
  	public void run() {
  
  		try {
  			if (systemIO) {
  				in = new FastScanner(System.in);
  				out = new PrintWriter(System.out);
  			} else {
  				in = new FastScanner(new File("input.txt"));
  				out = new PrintWriter(new File("output.txt"));
  			}
  			solve();
  
  			out.close();
  		} catch (IOException e) {
  			e.printStackTrace();
  		}
  	}
  
  	class FastScanner {
  		BufferedReader br;
  		StringTokenizer st;
  
  		FastScanner(File f) {
  			try {
  				br = new BufferedReader(new FileReader(f));
  			} catch (FileNotFoundException e) {
  				e.printStackTrace();
  			}
  		}
  
  		FastScanner(InputStream f) {
  			br = new BufferedReader(new InputStreamReader(f));
  		}
  
  		String nextLine() {
  			try {
  				return br.readLine();
  			} catch (IOException e) {
  				return null;
  			}
  		}
  
  		String next() {
  			while (st == null || !st.hasMoreTokens()) {
  				try {
  					st = new StringTokenizer(br.readLine());
  				} catch (IOException e) {
  					e.printStackTrace();
  				}
  			}
  			return st.nextToken();
  		}
  
  		int nextInt() {
  			return Integer.parseInt(next());
  		}
  
  		long nextLong() {
  			return Long.parseLong(next());
  		}
  
  		double nextDouble() {
  			return Double.parseDouble(next());
  		}
  
  	}
  
  	// AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  	public static void main(String[] args) {
  		new A().run();
  	}
  }