import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = getInt(sc);
		int m = getInt(sc);
		int x = getInt(sc);

		int[] janctions = getIntArray(sc);
		List<Integer> jancList = new ArrayList<Integer>();
		for (int janc : janctions) {
			jancList.add(janc);
		}

		int costToN = 0;
		for (int i = x; i <= n; i++) {
			if (jancList.contains(i)) {
				costToN++;
			}
		}

		int costToZero = 0;
		for (int i = x; i >= 0; i--) {
			if (jancList.contains(i)) {
				costToZero++;
			}
		}

		if (costToN < costToZero) {
			System.out.println(costToN);
		} else {
			System.out.println(costToZero);
		}

	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をlongで返却
	 *
	 * @return
	 */
	public static long getLong(Scanner sc) {

		return Long.parseLong(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をintで返却
	 *
	 * @return
	 */
	public static int getInt(Scanner sc) {

		return Integer.parseInt(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をStringで返却
	 *
	 * @return
	 */
	public static String getString(Scanner sc) {

		return sc.next();
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をint配列で返却
	 *
	 * @return
	 */
	public static int[] getIntArray(Scanner sc) {
		String line = "";
		// 直前にnext()を実行していると改行コードだけ取ってしまうのでその対策
		while (line.equals("")) {
			line = sc.nextLine();
		}

		String[] strArray = line.split(" ");
		int[] intArray = new int[strArray.length];
		for (int i = 0; i < strArray.length; i++) {
			intArray[i] = Integer.parseInt(strArray[i]);
		}
		return intArray;
	}

} import java.util.ArrayList; ArrayList java.util import java.util.List; List java.util import java.util.Scanner; Scanner java.util public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = getInt(sc);
		int m = getInt(sc);
		int x = getInt(sc);

		int[] janctions = getIntArray(sc);
		List<Integer> jancList = new ArrayList<Integer>();
		for (int janc : janctions) {
			jancList.add(janc);
		}

		int costToN = 0;
		for (int i = x; i <= n; i++) {
			if (jancList.contains(i)) {
				costToN++;
			}
		}

		int costToZero = 0;
		for (int i = x; i >= 0; i--) {
			if (jancList.contains(i)) {
				costToZero++;
			}
		}

		if (costToN < costToZero) {
			System.out.println(costToN);
		} else {
			System.out.println(costToZero);
		}

	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をlongで返却
	 *
	 * @return
	 */
	public static long getLong(Scanner sc) {

		return Long.parseLong(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をintで返却
	 *
	 * @return
	 */
	public static int getInt(Scanner sc) {

		return Integer.parseInt(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をStringで返却
	 *
	 * @return
	 */
	public static String getString(Scanner sc) {

		return sc.next();
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をint配列で返却
	 *
	 * @return
	 */
	public static int[] getIntArray(Scanner sc) {
		String line = "";
		// 直前にnext()を実行していると改行コードだけ取ってしまうのでその対策
		while (line.equals("")) {
			line = sc.nextLine();
		}

		String[] strArray = line.split(" ");
		int[] intArray = new int[strArray.length];
		for (int i = 0; i < strArray.length; i++) {
			intArray[i] = Integer.parseInt(strArray[i]);
		}
		return intArray;
	}

} Main public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = getInt(sc);
		int m = getInt(sc);
		int x = getInt(sc);

		int[] janctions = getIntArray(sc);
		List<Integer> jancList = new ArrayList<Integer>();
		for (int janc : janctions) {
			jancList.add(janc);
		}

		int costToN = 0;
		for (int i = x; i <= n; i++) {
			if (jancList.contains(i)) {
				costToN++;
			}
		}

		int costToZero = 0;
		for (int i = x; i >= 0; i--) {
			if (jancList.contains(i)) {
				costToZero++;
			}
		}

		if (costToN < costToZero) {
			System.out.println(costToN);
		} else {
			System.out.println(costToZero);
		}

	} main {
		Scanner sc = new Scanner(System.in);
		int n = getInt(sc);
		int m = getInt(sc);
		int x = getInt(sc);

		int[] janctions = getIntArray(sc);
		List<Integer> jancList = new ArrayList<Integer>();
		for (int janc : janctions) {
			jancList.add(janc);
		}

		int costToN = 0;
		for (int i = x; i <= n; i++) {
			if (jancList.contains(i)) {
				costToN++;
			}
		}

		int costToZero = 0;
		for (int i = x; i >= 0; i--) {
			if (jancList.contains(i)) {
				costToZero++;
			}
		}

		if (costToN < costToZero) {
			System.out.println(costToN);
		} else {
			System.out.println(costToZero);
		}

	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int n = getInt(sc); n getInt(sc) getInt sc int m = getInt(sc); m getInt(sc) getInt sc int x = getInt(sc); x getInt(sc) getInt sc int[] janctions = getIntArray(sc); janctions getIntArray(sc) getIntArray sc List<Integer> jancList = new ArrayList<Integer>(); jancList new ArrayList<Integer>() for (int janc : janctions) {
			jancList.add(janc);
		} int janc janctions {
			jancList.add(janc);
		} {
			jancList.add(janc);
		} jancList.add(janc) jancList.add jancList janc int costToN = 0; costToN 0 for (int i = x; i <= n; i++) {
			if (jancList.contains(i)) {
				costToN++;
			}
		} int i = x; int i = x; i x i <= n i n i++ i++ i {
			if (jancList.contains(i)) {
				costToN++;
			}
		} {
			if (jancList.contains(i)) {
				costToN++;
			}
		} if (jancList.contains(i)) {
				costToN++;
			} jancList.contains(i) jancList.contains jancList i {
				costToN++;
			} costToN++ costToN int costToZero = 0; costToZero 0 for (int i = x; i >= 0; i--) {
			if (jancList.contains(i)) {
				costToZero++;
			}
		} int i = x; int i = x; i x i >= 0 i 0 i-- i-- i {
			if (jancList.contains(i)) {
				costToZero++;
			}
		} {
			if (jancList.contains(i)) {
				costToZero++;
			}
		} if (jancList.contains(i)) {
				costToZero++;
			} jancList.contains(i) jancList.contains jancList i {
				costToZero++;
			} costToZero++ costToZero if (costToN < costToZero) {
			System.out.println(costToN);
		} else {
			System.out.println(costToZero);
		} costToN < costToZero costToN costToZero {
			System.out.println(costToN);
		} System.out.println(costToN) System.out.println System.out System System.out costToN {
			System.out.println(costToZero);
		} System.out.println(costToZero) System.out.println System.out System System.out costToZero String[] args args /**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をlongで返却
	 *
	 * @return
	 */
	public static long getLong(Scanner sc) {

		return Long.parseLong(sc.next());
	} getLong {

		return Long.parseLong(sc.next());
	} return Long.parseLong(sc.next()); Long.parseLong(sc.next()) Long.parseLong Long sc.next() sc.next sc Scanner sc sc /**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をintで返却
	 *
	 * @return
	 */
	public static int getInt(Scanner sc) {

		return Integer.parseInt(sc.next());
	} getInt {

		return Integer.parseInt(sc.next());
	} return Integer.parseInt(sc.next()); Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc Scanner sc sc /**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をStringで返却
	 *
	 * @return
	 */
	public static String getString(Scanner sc) {

		return sc.next();
	} getString {

		return sc.next();
	} return sc.next(); sc.next() sc.next sc Scanner sc sc /**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をint配列で返却
	 *
	 * @return
	 */
	public static int[] getIntArray(Scanner sc) {
		String line = "";
		// 直前にnext()を実行していると改行コードだけ取ってしまうのでその対策
		while (line.equals("")) {
			line = sc.nextLine();
		}

		String[] strArray = line.split(" ");
		int[] intArray = new int[strArray.length];
		for (int i = 0; i < strArray.length; i++) {
			intArray[i] = Integer.parseInt(strArray[i]);
		}
		return intArray;
	} getIntArray {
		String line = "";
		// 直前にnext()を実行していると改行コードだけ取ってしまうのでその対策
		while (line.equals("")) {
			line = sc.nextLine();
		}

		String[] strArray = line.split(" ");
		int[] intArray = new int[strArray.length];
		for (int i = 0; i < strArray.length; i++) {
			intArray[i] = Integer.parseInt(strArray[i]);
		}
		return intArray;
	} String line = ""; line "" while (line.equals("")) {
			line = sc.nextLine();
		} line.equals("") line.equals line "" {
			line = sc.nextLine();
		} line = sc.nextLine() line sc.nextLine() sc.nextLine sc String[] strArray = line.split(" "); strArray line.split(" ") line.split line " " int[] intArray = new int[strArray.length]; intArray new int[strArray.length] strArray.length strArray strArray.length for (int i = 0; i < strArray.length; i++) {
			intArray[i] = Integer.parseInt(strArray[i]);
		} int i = 0; int i = 0; i 0 i < strArray.length i strArray.length strArray strArray.length i++ i++ i {
			intArray[i] = Integer.parseInt(strArray[i]);
		} {
			intArray[i] = Integer.parseInt(strArray[i]);
		} intArray[i] = Integer.parseInt(strArray[i]) intArray[i] intArray i Integer.parseInt(strArray[i]) Integer.parseInt Integer strArray[i] strArray i return intArray; intArray Scanner sc sc public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = getInt(sc);
		int m = getInt(sc);
		int x = getInt(sc);

		int[] janctions = getIntArray(sc);
		List<Integer> jancList = new ArrayList<Integer>();
		for (int janc : janctions) {
			jancList.add(janc);
		}

		int costToN = 0;
		for (int i = x; i <= n; i++) {
			if (jancList.contains(i)) {
				costToN++;
			}
		}

		int costToZero = 0;
		for (int i = x; i >= 0; i--) {
			if (jancList.contains(i)) {
				costToZero++;
			}
		}

		if (costToN < costToZero) {
			System.out.println(costToN);
		} else {
			System.out.println(costToZero);
		}

	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をlongで返却
	 *
	 * @return
	 */
	public static long getLong(Scanner sc) {

		return Long.parseLong(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をintで返却
	 *
	 * @return
	 */
	public static int getInt(Scanner sc) {

		return Integer.parseInt(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をStringで返却
	 *
	 * @return
	 */
	public static String getString(Scanner sc) {

		return sc.next();
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をint配列で返却
	 *
	 * @return
	 */
	public static int[] getIntArray(Scanner sc) {
		String line = "";
		// 直前にnext()を実行していると改行コードだけ取ってしまうのでその対策
		while (line.equals("")) {
			line = sc.nextLine();
		}

		String[] strArray = line.split(" ");
		int[] intArray = new int[strArray.length];
		for (int i = 0; i < strArray.length; i++) {
			intArray[i] = Integer.parseInt(strArray[i]);
		}
		return intArray;
	}

} public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = getInt(sc);
		int m = getInt(sc);
		int x = getInt(sc);

		int[] janctions = getIntArray(sc);
		List<Integer> jancList = new ArrayList<Integer>();
		for (int janc : janctions) {
			jancList.add(janc);
		}

		int costToN = 0;
		for (int i = x; i <= n; i++) {
			if (jancList.contains(i)) {
				costToN++;
			}
		}

		int costToZero = 0;
		for (int i = x; i >= 0; i--) {
			if (jancList.contains(i)) {
				costToZero++;
			}
		}

		if (costToN < costToZero) {
			System.out.println(costToN);
		} else {
			System.out.println(costToZero);
		}

	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をlongで返却
	 *
	 * @return
	 */
	public static long getLong(Scanner sc) {

		return Long.parseLong(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をintで返却
	 *
	 * @return
	 */
	public static int getInt(Scanner sc) {

		return Integer.parseInt(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をStringで返却
	 *
	 * @return
	 */
	public static String getString(Scanner sc) {

		return sc.next();
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をint配列で返却
	 *
	 * @return
	 */
	public static int[] getIntArray(Scanner sc) {
		String line = "";
		// 直前にnext()を実行していると改行コードだけ取ってしまうのでその対策
		while (line.equals("")) {
			line = sc.nextLine();
		}

		String[] strArray = line.split(" ");
		int[] intArray = new int[strArray.length];
		for (int i = 0; i < strArray.length; i++) {
			intArray[i] = Integer.parseInt(strArray[i]);
		}
		return intArray;
	}

} Main
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = getInt(sc);
		int m = getInt(sc);
		int x = getInt(sc);

		int[] janctions = getIntArray(sc);
		List<Integer> jancList = new ArrayList<Integer>();
		for (int janc : janctions) {
			jancList.add(janc);
		}

		int costToN = 0;
		for (int i = x; i <= n; i++) {
			if (jancList.contains(i)) {
				costToN++;
			}
		}

		int costToZero = 0;
		for (int i = x; i >= 0; i--) {
			if (jancList.contains(i)) {
				costToZero++;
			}
		}

		if (costToN < costToZero) {
			System.out.println(costToN);
		} else {
			System.out.println(costToZero);
		}

	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をlongで返却
	 *
	 * @return
	 */
	public static long getLong(Scanner sc) {

		return Long.parseLong(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をintで返却
	 *
	 * @return
	 */
	public static int getInt(Scanner sc) {

		return Integer.parseInt(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をStringで返却
	 *
	 * @return
	 */
	public static String getString(Scanner sc) {

		return sc.next();
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をint配列で返却
	 *
	 * @return
	 */
	public static int[] getIntArray(Scanner sc) {
		String line = "";
		// 直前にnext()を実行していると改行コードだけ取ってしまうのでその対策
		while (line.equals("")) {
			line = sc.nextLine();
		}

		String[] strArray = line.split(" ");
		int[] intArray = new int[strArray.length];
		for (int i = 0; i < strArray.length; i++) {
			intArray[i] = Integer.parseInt(strArray[i]);
		}
		return intArray;
	}

}
