source_code: import java.io.*;
  import java.util.*;
  
  public class CF159DIV2 {
  	FastScanner in;
  	PrintWriter out;
  
  	void solve() {
  		int n = in.nextInt();
  		int m = in.nextInt();
  		int k = in.nextInt();
  		int[] a = new int[n];
  		for (int i = 0; i < n; i++)
  			a[i] = in.nextInt();
  		Arrays.sort(a);
  		for (int i = 0; i < a.length / 2; i++) {
  			int tmp = a[i];
  			a[i] = a[n - i - 1];
  			a[n - i - 1] = tmp;
  		}
  		int need = m;
  		int have = k;
  		int ans = 0;
  		int it = 0;
  		while (have < need) {
  			have += a[it++] - 1;
  			ans++;
  			if (it >= n) break;
  		}
  		if (have >= need) {
  			out.println(ans);
  		} else {
  			out.println(-1);
  		}
  	}
  
  	void run() {
  		try {
  			in = new FastScanner(new File("object.in"));
  			out = new PrintWriter(new File("object.out"));
  
  			solve();
  
  			out.close();
  		} catch (FileNotFoundException e) {
  			e.printStackTrace();
  		}
  	}
  
  	void runIO() {
  
  		in = new FastScanner(System.in);
  		out = new PrintWriter(System.out);
  
  		solve();
  
  		out.close();
  	}
  
  	class FastScanner {
  		BufferedReader br;
  		StringTokenizer st;
  
  		public FastScanner(File f) {
  			try {
  				br = new BufferedReader(new FileReader(f));
  			} catch (FileNotFoundException e) {
  				e.printStackTrace();
  			}
  		}
  
  		public FastScanner(InputStream f) {
  			br = new BufferedReader(new InputStreamReader(f));
  		}
  
  		String next() {
  			while (st == null || !st.hasMoreTokens()) {
  				String s = null;
  				try {
  					s = br.readLine();
  				} catch (IOException e) {
  					e.printStackTrace();
  				}
  				if (s == null)
  					return null;
  				st = new StringTokenizer(s);
  			}
  			return st.nextToken();
  		}
  
  		boolean hasMoreTokens() {
  			while (st == null || !st.hasMoreTokens()) {
  				String s = null;
  				try {
  					s = br.readLine();
  				} catch (IOException e) {
  					e.printStackTrace();
  				}
  				if (s == null)
  					return false;
  				st = new StringTokenizer(s);
  			}
  			return true;
  		}
  
  		int nextInt() {
  			return Integer.parseInt(next());
  		}
  
  		long nextLong() {
  			return Long.parseLong(next());
  		}
  		
  		double nextDouble() {
  			return Double.parseDouble(next());
  		}
  	}
  
  	public static void main(String[] args) {
  		new CF159DIV2().runIO();
  	}
  }