#include #define rep(i,n) for(int i=0;i<(n);i++) using namespace std; vector a(3); vector solve(vector b){ int n=b.size(); vector cnt(8); rep(S,1<>i&1) { rep(j,3) if((ok>>j&1)==0 && a[j]<=b[i]) { ok|=1< b(n); rep(i,n) scanf("%d",&b[i]); sort(a.rbegin(),a.rend()); sort(b.rbegin(),b.rend()); auto cnt1=solve(vector(b.begin(),b.begin()+n/2)); auto cnt2=solve(vector(b.begin()+n/2,b.end())); int ans=0; rep(S,8) rep(T,8) { bool ok=true; int carry=0; rep(i,3){ int b1=S>>i&1; int b2=T>>i&1; if(b1+b2+carry==0){ ok=false; } else{ carry=b1+b2+carry-1; } } if(ok) ans+=cnt1[S]*cnt2[T]; } printf("%d\n",ans); return 0; }