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.*;

public class bill {
static int binarySearchCount(int arr[], int n, int key)  
{ 
    int left = 0, right = n; 
  
    int mid = 0; 
    while (left < right) { 
    mid = (right + left) >> 1; 
  
    // Check if key is present in array 
    if (arr[mid] == key) { 
          
        // If duplicates are present it returns 
        // the position of last element 
        while (mid+1<n && arr[mid + 1] == key) 
        mid++; 
        break; 
    } 
  
    // If key is smaller, ignore right half 
    else if (arr[mid] > key) 
        right = mid; 
  
    // If key is greater, ignore left half 
    else
        left = mid + 1; 
    } 
  
    // If key is not found in array then it will be 
    // before mid 
    while (mid > - 1 && arr[mid] > key) 
    mid--; 
  
    // Return mid + 1 because of 0-based indexing 
    // of array 
    return mid + 1; 
} 
	static void swap(char ch[],int i,int j )
	{
		char c=ch[j];
		ch[j]=ch[i];
		ch[i]=c;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	       Scanner in=new Scanner(System.in);
int n=in.nextInt();
ArrayList<Integer> list=new ArrayList<Integer>();
for(int i=0;i<n;i++)
	list.add(in.nextInt());
Collections.sort(list);
int ans=-1;int t=0;int u=1;int j=0;int a=0;int max=0;
for(int i = 0; i < n; i++)
{
	int toCompare = list.get(i) - 5;
	while(toCompare > list.get(a)) 
	{
		a++;
	}
	int val = i - a + 1;
	if(val > max)
	{
		max = val;
	}
}
System.out.println(max);
	
	}

}