#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <cstring>
#include <queue>

using namespace std;

int N;
int MS[101];
vector<vector<char> > howToGet;
map<vector<char>,char> dp;
void dfs(int kind,int wgt,const vector<char> &v){
  if(kind==0){
    vector<char> nv=v;
    nv.push_back(0);
    dfs(kind+1,wgt,nv);
  }
  else if(wgt==0)howToGet.push_back(v);
  else if(kind==10)return;
  else{
    for(int i=0;i*kind<=10;i++){
      if(wgt-i*kind>=0){
	vector<char> nv=v;
	nv.push_back(i);
	dfs(kind+1,wgt-i*kind,nv);
      }
    }
  }
}

int dfs2(const vector<char> &v){
  if(dp.count(v)!=0)return dp[v];
  int res=0;
  for(int pos=0;pos<(int)howToGet.size();pos++){
    // 1セット分取れるか
    vector<char> nv=v;
    bool ok=true;
    for(int j=1;j<(int)howToGet[pos].size();j++){
      nv[j]-=howToGet[pos][j];
      if(nv[j]<0){
	ok=false;
	break;
      }
    }
    // iセット取れるならとる
    if(ok)res=max(res,dfs2(nv)+1);
  }
  return dp[v]=res;
}

int main(){
  dfs(0,10,vector<char>());
  while(cin>>N&&N){
    vector<char> cnts;
    for(int i=0;i<N;i++)cin>>MS[i];
    for(int i=0;i<=10;i++)cnts.push_back(0);
    for(int i=0;i<N;i++)cnts[MS[i]]++;
    int sum=0;
    for(int i=1;i<=4;i++){
      int a=min(cnts[i],cnts[10-i]);
      cnts[i]-=a;cnts[10-i]-=a;
      sum+=a;
    }
    int a=cnts[5]/2;
    cnts[5]-=2*a;
    sum+=a;
    int res=dfs2(cnts)+sum;
    cout<<res<<endl;
  }
  return 0;
}