/*
思路:动态规划,记忆递归搜索
*/

#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;
}