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.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;
 
public class code2 {
	 static class Reader 
	    { 
	        final private int BUFFER_SIZE = 1 << 16; 
	        private DataInputStream din; 
	        private byte[] buffer; 
	        private int bufferPointer, bytesRead; 
	  
	        public Reader() 
	        { 
	            din = new DataInputStream(System.in); 
	            buffer = new byte[BUFFER_SIZE]; 
	            bufferPointer = bytesRead = 0; 
	        } 
	  
	        public Reader(String file_name) throws IOException 
	        { 
	            din = new DataInputStream(new FileInputStream(file_name)); 
	            buffer = new byte[BUFFER_SIZE]; 
	            bufferPointer = bytesRead = 0; 
	        } 
	  
	        public String readLine() throws IOException 
	        { 
	            byte[] buf = new byte[64]; // line length 
	            int cnt = 0, c; 
	            while ((c = read()) != -1) 
	            { 
	                if (c == '\n') 
	                    break; 
	                buf[cnt++] = (byte) c; 
	            } 
	            return new String(buf, 0, cnt); 
	        } 
	  
	        public int nextInt() throws IOException 
	        { 
	            int ret = 0; 
	            byte c = read(); 
	            while (c <= ' ') 
	                c = read(); 
	            boolean neg = (c == '-'); 
	            if (neg) 
	                c = read(); 
	            do
	            { 
	                ret = ret * 10 + c - '0'; 
	            }  while ((c = read()) >= '0' && c <= '9'); 
	  
	            if (neg) 
	                return -ret; 
	            return ret; 
	        } 
	  
	        public long nextLong() throws IOException 
	        { 
	            long ret = 0; 
	            byte c = read(); 
	            while (c <= ' ') 
	                c = read(); 
	            boolean neg = (c == '-'); 
	            if (neg) 
	                c = read(); 
	            do { 
	                ret = ret * 10 + c - '0'; 
	            } 
	            while ((c = read()) >= '0' && c <= '9'); 
	            if (neg) 
	                return -ret; 
	            return ret; 
	        } 
	  
	        public double nextDouble() throws IOException 
	        { 
	            double ret = 0, div = 1; 
	            byte c = read(); 
	            while (c <= ' ') 
	                c = read(); 
	            boolean neg = (c == '-'); 
	            if (neg) 
	                c = read(); 
	  
	            do { 
	                ret = ret * 10 + c - '0'; 
	            } 
	            while ((c = read()) >= '0' && c <= '9'); 
	  
	            if (c == '.') 
	            { 
	                while ((c = read()) >= '0' && c <= '9') 
	                { 
	                    ret += (c - '0') / (div *= 10); 
	                } 
	            } 
	  
	            if (neg) 
	                return -ret; 
	            return ret; 
	        } 
	  
	        private void fillBuffer() throws IOException 
	        { 
	            bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE); 
	            if (bytesRead == -1) 
	                buffer[0] = -1; 
	        } 
	  
	        private byte read() throws IOException 
	        { 
	            if (bufferPointer == bytesRead) 
	                fillBuffer(); 
	            return buffer[bufferPointer++]; 
	        } 
	  
	        public void close() throws IOException 
	        { 
	            if (din == null) 
	                return; 
	            din.close(); 
	        } 
	    } 	
	
	public static int[] buildeLCS(String str,int n)
	{
		int[]lcs=new int[n];
		
		int i=1;
		int j=0;
		
		while(i<n)
		{
			if(str.charAt(i)==str.charAt(j))
			{
				lcs[i]=j+1;
				j++;
				i++;
			}
			else
			{
				if(j>0)
				{
					j=lcs[j-1];
				}
				else
				{
					lcs[i]=0;
					j=0;
					i++;
				}
			}
		}
		return lcs;
	}
	public static void match(String txt,String pat)
	{
		int[]lcs=buildeLCS(pat,pat.length());
		int j=0;//pattern pointer
		int i=0;//txt pointer
		while(i<txt.length())
		{
			if(txt.charAt(i)==pat.charAt(j))
			{
				i++;
				j++;
			}
			if(j==pat.length()-1)
			{
				System.out.println("String found at "+(i-j));
				j=lcs[j-1];
			}
			else if(i<txt.length() && txt.charAt(i)!=pat.charAt(j))
			{
				if(j>0)
				j=lcs[j-1];
				else
				i++;
			}
		}	
	}
	
	
	public static void main(String args[]) throws IOException
	{
        Reader s = new Reader();
        int n=s.nextInt();
        ArrayList<Integer>al=new ArrayList<>();
        for(int i=0;i<n;i++)
        {
        	int x=s.nextInt();
        	al.add(2*x);
        }
        Collections.sort(al);
        //Arrays.sort(arr);
        int max=0;
       // System.out.println(Arrays.toString(arr));
       // System.out.println(al);
        for(int i=0;i<n;i++)
        {
        	int start=(al.get(i)/2)+5;
        	int pos=Collections.binarySearch(al, (2*start)+1);
        	pos=Math.abs(pos);
       // 	System.out.println(arr[i]+" "+pos);
        	max=Math.max(max,pos-(i+1));
        }
        System.out.println(max);
		s.close();
	}
 
	static class Pair{
		int start;int end;
		Pair(int x,int y)
		{
			start=x;
			end=y;
		}
		 @Override
		    public int hashCode() {
		        final int prime = 31;
		        int result = 1;
		        result = prime * result + (start+end); 
		        return result;
		    }
		 
		    //Compare only account numbers
		    @Override
		    public boolean equals(Object obj) {
		        if (this == obj)
		            return true;
		        if (obj == null)
		            return false;
		        if (getClass() != obj.getClass())
		            return false;
		        Pair other = (Pair) obj;
		        if (start != other.start || end!=other.end )
		            return false;
		        return true;
		    }
		 
	}
}