#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#define re register
using namespace std;
map<string,int> q;
char o[5]="+-*/";
int tot;
bool flag;
inline double myabs(double x){
return x>0?x:-x;
}
inline bool check(double x){
return myabs(x-24)<0.000001;
}
inline double add(double a, double b){
return a+b;
}
inline double sub(double a, double b){
return a-b;
}
inline double mul(double a, double b){
return a*b;
}
inline double div(double a, double b){
if(!b) return -1;
return a/b;
}
double(*op[4])(double,double)={
add,sub,mul,div
};
inline void Calculation(double a,double b,double c,double d){
for(re int i=0;i<4;i++)
for(re int j=0;j<4;j++)
for(re int k=0;k<4;k++){
double ret=op[k](op[j](op[i](a,b),c),d);
if(check(ret)) tot++;
ret=op[k](op[i](a,op[j](b,c)),d);
if(check(ret)) tot++;
ret=op[i](a,op[k](op[j](b,c),d));
if(check(ret)) tot++;
ret=op[j](op[i](a,b),op[k](c,d));
if(check(ret)) tot++;
ret=op[i](a,op[j](b,op[k](c,d)));
if(check(ret)) tot++;
}
}
double a[5];
int main(){
for(re int i=1;i<=4;i++) scanf("%lf",&a[i]);
bool s=false;
for(re int i=1;i<=4;i++){
for(re int j=1;j<=4;j++){
if(i==j) continue;
for(re int k=1;k<=4;k++){
if(i==k||i==10-i-j-k||j==k||j==10-j-k-i||k==10-j-i-k) continue;
string a1,b1,c1,d1,f1;
a1=char(a[i]+'0');
b1=char(a[j]+'0');
c1=char(a[k]+'0');
d1=char(a[10-i-j-k]+'0');
f1=a1+' '+b1+' '+c1+' '+d1;
if(q[f1]) continue;
q[f1]=1;
Calculation(a[i],a[j],a[k],a[10-i-j-k]);
}
}
}
printf("%d",tot);
return 0;
}