Problem: You are a coach at your local university. There are n students under your supervision, the programming skill of the i-th student is a_i.

You have to create a team for a new programming competition. As you know, the more students some team has the more probable its victory is! So you have to create a team with the maximum number of students. But you also know that a team should be balanced. It means that the programming skill of each pair of students in a created team should differ by no more than 5.

Your task is to report the maximum possible number of students in a balanced team.

Input

The first line of the input contains one integer n (1 ≤ n ≤ 2 ⋅ 10^5) — the number of students.

The second line of the input contains n integers a_1, a_2, ..., a_n (1 ≤ a_i ≤ 10^9), where a_i is a programming skill of the i-th student.

Output

Print one integer — the maximum possible number of students in a balanced team.

Examples

Input


6
1 10 17 12 15 2


Output


3


Input


10
1337 1337 1337 1337 1337 1337 1337 1337 1337 1337


Output


10


Input


6
1 1000 10000 10 100 1000000000


Output


1

Note

In the first example you can create a team with skills [12, 17, 15].

In the second example you can take all students in a team because their programming skills are equal.

In the third example you can create a team consisting of a single student (and you cannot create a team consisting of at least two students).

Solution (in JAVA):

Solution:
import java.util.*;
import java.util.Map.Entry;
import java.lang.*;
import java.math.*;
import java.text.*;
import java.io.*;
		public final class Solve {
		static PrintWriter out = new PrintWriter(System.out); 
		static void flush() {
	 	out.flush();
	 	}
		static void run(long s, long e) {
		NumberFormat formatter = new DecimalFormat("#0.00000");
		System.out.print("Execution time is " + formatter.format((e - s) / 1000d) + " seconds");
		}
		static class FastReader {
	    BufferedReader br;
	    StringTokenizer st;
	
	    public FastReader() {
	    br = new BufferedReader(new
	    InputStreamReader(System.in));
	    }
	    static boolean isPalindrome(String str1, String str2) {
	    String str3 = str1+str2;
	    int i = 0, j = str3.length()-1;
	    while(i < j) {
	    char a = str3.charAt(i), b = str3.charAt(j);
	    if(a != b) return false;
	    i++;j--;
	    }
	    return true;
	    }
	    static boolean isPalindrome(String str) {
	    int i = 0, j = str.length()-1;
	    while(i < j) {
	    char a = str.charAt(i), b = str.charAt(j);
	    if(a != b) return false;
	    i++;j--;
	    }
	    return true;
	    }
	    String next() {
	    while (st == null || !st.hasMoreElements()) {
	    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());}
	    static int fact(int n) {
	    if(n == 1) return 1;
	    return n * fact(n-1);
	   	}
	    public int[] readIntArray(int n) {
	    int[] arr = new int[n];
		for(int i=0; i<n; ++i)
		arr[i]=nextInt();
		return arr;
		}
	    public int[][] readIntArray(int m, int n){
		int[][] arr = new int[m][n];
		for(int i = 0;i<m;i++) 
		for(int j = 0;j<n;j++) 
		arr[i][j] = nextInt();
		return arr;
	    }
	    public String[] readStringArray(int n) {
		String[] arr = new String[n];
		for(int i=0; i<n; ++i)
		arr[i]= nextLine();
		return arr;
	    }
		static int gcd(int a, int b) { 
		if (b == 0) return a; 
		return gcd(b, a % b);  
		}
	    double nextDouble() {return Double.parseDouble(next());}
	    String nextLine() {
	    String str = "";
	    try{str = br.readLine();}
	    catch (IOException e) {e.printStackTrace();}
	    return str;}
	    }
		static void countSort(int[] arr, int n, int ex) {
			int[] out = new int[n];
			int[] cou = new int[10];
			
			for(int i = 0;i<n;i++) {
				cou[(arr[i]/ex)%10]++;
			}
			
			for(int i = 1;i<10;++i) {
				cou[i] += cou[i-1];
			}
			
			for(int i = n-1;i>=0;i--) {
				out[cou[(arr[i]/ex)%10]-1] = arr[i];
				cou[(arr[i]/ex)%10]--;
			}
			
			for(int i = 0;i<n;++i) {
				arr[i] = out[i];
			}
		}
		static void radixSort(int[] arr, int n) {
			int m = arr[0];
			for(int i = 0;i<n;i++) {
				if(arr[i] > m) {
					m = arr[i];
				}
			}
			
			for(int ex = 1;m/ex > 0;ex *= 10) {
				countSort(arr, n, ex);
			}
		}
		static void solve(int[] arr, int n) {
			radixSort(arr, n);
			
//			for(int i = 0;i<n;i++) {
//				out.print(arr[i]+" ");
//			}
			int ma = 0;
			int i = n-2;
			int j = n-1;
			int max = 1;
			int c = 1;
			int k = j;
			while(i >= 0) {
				if(arr[k] - arr[i] <= 5 && arr[j] - arr[i] <= 5) {
					i--;
					j--;
					c++;
				}
				else if(arr[k] - arr[i] > 5) {
					max = Math.max(c, max);
					k--;
					c--;	
				}
				 if(k == i){
					k = i;
					j = i;
					i--;
					max = Math.max(c, max);
					c = 1;
				}
			
			}
			max = Math.max(max, c);
			out.println(max);
		}
		public static void main(String args[]) throws Exception {
	    FastReader sc = new FastReader();
	    long s = System.currentTimeMillis();
	    int n = sc.nextInt();
	    int[] arr = sc.readIntArray(n);
	    solve(arr, n);
	    flush();
	    long e = System.currentTimeMillis();
//	    run(s,e);
	    }
	}