/*
思路:动态规划,记忆递归搜索
*/
#include <iostream>
#include <vector>
#include <stack>
#include <map>
#include <algorithm>
using namespace std;
int dp[100001];
int helper(int nums[],int len){
if(dp[len]!=-1) return dp[len];
int res=0;
if(len==0) return 0;
else if(len==1) res=2;
else if(len==2){
if(nums[1]-nums[0]<=20) res=1;
else res=4;
}
else{
int a=2+helper(nums+1,len-1);
int b=a;
if(nums[1]-nums[0]<=20){
b=1+helper(nums+2,len-2);
}
int c=a;
if(nums[1]-nums[0]<=10 && nums[2]-nums[1]<=10){
c=helper(nums+3,len-3);
}
res=min(min(a,b),c);
}
dp[len]=res;
return dp[len];
//return res;
}
int main(){
int n;
int nums[100001];
while(cin>>n){
for(int i=0;i<n;++i){
cin>>nums[i];
dp[i]=-1;
}
dp[n]=-1;
sort(nums,nums+n);
int res=helper(nums,n);
cout<<res<<endl;
}
return 0;
}