/*
TASK:brkclk
LANG:C++
*/
//#include <stdio.h>
#include <iostream>
#include <list>
#define DA 1
#define ND -1
#define NE 0
int chas[10][7]={{DA,DA,DA,DA,DA,ND,DA},
									{ND,DA,ND,DA,ND,ND,ND},
									{ND,DA,DA,ND,DA,DA,DA},
                  {ND,DA,ND,DA,DA,DA,DA},
                  {DA,DA,ND,DA,ND,DA,ND},
                  {DA,ND,ND,DA,DA,DA,DA},
                  {DA,ND,DA,DA,DA,DA,DA},
                  {ND,DA,ND,DA,DA,ND,ND},
                  {DA,DA,DA,DA,DA,DA,DA},
                  {DA,DA,ND,DA,DA,DA,DA}};
char mpa[20000]={0};
int chkclk(int a[],int b[])
{
int i;
for(i=0;i<7;i++)
	{if((a[i]==ND&&b[i]==DA)||(a[i]==DA&&b[i]==ND))
  	return 0;
  }
return 1;
}
int curr[4][7];
class clk{
public:
int hrs;
int min;
clk()
	{
	min=0;
	hrs=0;
	}
clk(int a,int b)
	{
  min=a;
  hrs=b;
  }
void normalize();
void operator =(class clk tmp);
};
void clk::normalize()
{
int nm;
nm=min/60;
min=min%60;
hrs+=nm;
hrs=hrs%24;
}
void clk::operator =(class clk tmp)
{
min=tmp.min;
hrs=tmp.hrs;
}
class clk & operator +(class clk &a,int b)
{
a.min=a.min+b;
a.normalize();
return a;
}
class clk a[20000];
int theonly(int h,int size);
int main()
{
char tmp[4];
int i,j,pos[4][10];
for(i=0;i<5;i++)
	for(j=0;j<4;j++)
  	{
    scanf("%s",tmp);
    if(i%2==0)
    	{
      if(tmp[1]=='.')
      	curr[j][4+i/2]=NE;
      if(tmp[1]=='=')
      	curr[j][4+i/2]=DA;
      if(tmp[1]=='-')
      	curr[j][4+i/2]=ND;
     	}
   	else
    	{
      if(tmp[0]=='.')
      	curr[j][(i/2)*2]=NE;
      if(tmp[0]=='#')
      	curr[j][(i/2)*2]=DA;
      if(tmp[0]=='|')
      	curr[j][(i/2)*2]=ND;
			if(tmp[2]=='.')
      	curr[j][(i/2)*2+1]=NE;
      if(tmp[2]=='#')
      	curr[j][(i/2)*2+1]=DA;
      if(tmp[2]=='|')
      	curr[j][(i/2)*2+1]=ND;
      }
   	}
for(j=0;j<4;j++)
	for(i=0;i<10;i++)
     pos[j][i]=0;
for(j=0;j<4;j++)
	for(i=0;i<10;i++)
		if(chkclk(curr[j],chas[i]))
    	pos[j][i]=1;
int t=0,hrs1,hrs2,min1,min2,fl=0,k;
if(pos[0][1]<3)
	hrs1=pos[0][1];
for(j=0;j<10;j++)
	{
	if(pos[1][j]==1)
  	{
    hrs2=j;
    for(i=0;i<6;i++)
    	{
      if(pos[2][i]==1)
      	{
        min1=i;
     		for(k=0;k<10;k++)
      		if(pos[3][k]==1)
        	{
					a[t].min=min1*10+k;
       		a[t++].hrs=hrs1*10+hrs2;
        	}
        }
      }
    }
	}
for(j=0;j<10;j++)
  if(pos[0][j]==0)
    fl=1;
if(fl==0)
	hrs1=0;
for(j=0;fl==0&&j<10;j++)
	{
	if(pos[1][j]==1)
  	{
    hrs2=j;
    for(i=0;i<6;i++)
    	{
      if(pos[2][i]==1)
      	{min1=i;
     		for(k=0;k<10;k++)
      		if(pos[3][k]==1)
        	{
					a[t++].min=min1*10+k;
       		a[t].hrs=hrs1*10+hrs2;
        	}
        }
      }
    }
	}
int max=1,mn;
for(i=0;i<t;i++)
  if((mn=theonly(i,t-1))>max)
  	max=mn;
printf("%d\n",max-1);
return 0;
}


int theonly(int h,int size)
{
int i,j;
int gol[20000];
class clk d;
int t=size-h+1,k=0,n,res=1,lk,fl=0,ksd[4][7],lp[4][7],hrs1,hrs2,min1,min2;
for(i=h+1;i<t;i++)
	gol[i-h]=i;
while(t>0)
	{
  d=a[h]+1;
  hrs1=(d.hrs)/10;
  hrs2=(d.hrs)%10;
  min1=(d.min)/10;
  min2=(d.min)%10;
  if(hrs1!=0)
  	for(i=0;i<7;i++)
    	ksd[0][i]=chas[hrs1][i]*(curr[0][i]!=0);
  if(hrs1==0)
  	for(i=0;i<7;i++)
    	ksd[0][i]=ND*(curr[0][i]!=0);
  for(i=0;i<7;i++)
   	ksd[1][i]=chas[hrs2][i]*(curr[1][i]!=0);
  for(i=0;i<7;i++)
   	ksd[2][i]=chas[min1][i]*(curr[2][i]!=0);
  for(i=0;i<7;i++)
	 	ksd[3][i]=chas[min2][i]*(curr[3][i]!=0);
  lk=0;
  for(j=0;j<t;j++)
    {
    d=a[gol[j]]+res;
		hrs1=(d.hrs)/10;
		hrs2=(d.hrs)%10;
 		min1=(d.min)/10;
 		min2=(d.min)%10;
    d=a[gol[j]]+(-res);
	 	for(i=0;i<7;i++)
    		lp[0][i]=chas[hrs1][i]*(curr[0][i]!=0);
	 	if(hrs1==0)
  		for(i=0;i<7;i++)
    		lp[0][i]=ND*(curr[0][i]!=0);
		for(i=0;i<7;i++)
  	 	lp[1][i]=chas[hrs2][i]*(curr[1][i]!=0);
 		for(i=0;i<7;i++)
   		lp[2][i]=chas[min1][i]*(curr[2][i]!=0);
 		for(i=0;i<7;i++)
	 		lp[3][i]=chas[min2][i]*(curr[3][i]!=0);
     fl=0;
     for(n=0;n<4;n++)
     	if(!chkclk(ksd[n],lp[n]))
      	fl=1;
     if(fl==0)
	     gol[lk++]=gol[j];
     }
  t=lk;
  res++;
	}
return res;
}
