/*
TASK:brkclk
LANG:C++
*/

//#define DEBUG

#include <cstdio>
#include <cstdlib>
#include <vector>
#include <queue>
#include <map>

using namespace std;

char masks[10];
char clock1[4];
char clock2[4];
char rabotesti[4];

/*struct Digit
{
	char parts[7];
};

Digit digits[4];*/

struct Timer
{
	#ifdef DEBUG
	int a;
	int b;
	int c;
	int d;
#endif
	long int time;
	Timer(int ax,int bx,int cx,int dx)
	{
		time = (ax*10+bx)*60+(cx*10+dx);
#ifdef DEBUG
		a = ax;
		b = bx;
		c = cx;
		d = dx;
#endif
	}
};

void input();

void init()
{
	masks[0] = (1 << 1)+(1 << 2)+(1 << 3)+(1 << 5)+(1 << 6)+(1 << 7);
	masks[1] = (1 << 3)+(1 << 6);
	masks[2] = (1 << 1)+(1 << 3)+(1 << 4)+(1 << 5)+(1 << 7);
	masks[3] = (1 << 1)+(1 << 3)+(1 << 4)+(1 << 6)+(1 << 7);
	masks[4] = (1 << 2)+(1 << 3)+(1 << 4)+(1 << 6);
	masks[5] = (1 << 1)+(1 << 2)+(1 << 4)+(1 << 6)+(1 << 7);
	masks[6] = (1 << 1)+(1 << 2)+(1 << 4)+(1 << 5)+(1 << 6)+(1 << 7);
	masks[7] = (1 << 1)+(1 << 2)+(1 << 5);
	masks[8] = (1 << 1)+(1 << 2)+(1 << 3)+(1 << 4)+(1 << 5)+(1 << 6)+(1 << 7);
	masks[9] = (1 << 1)+(1 << 2)+(1 << 3)+(1 << 4)+(1 << 6)+(1 << 7);
}

inline long int GetDiff(Timer* t1, Timer* t2)
{
	long int d = t2->time - t1->time;
	while(d < 0)
	{
		d+= 24*60;
	}
	return d;
}

int main()
{
#ifdef DEBUG
	freopen("input.txt","r",stdin);
#endif
	init();
	input();
	vector< int > possible[4];
	vector< int > guess[4];
	int j,i;
//1
	i = 0;
	for( j = 1;j < 3;j++)
		if(((masks[j] & clock1[i]) == masks[j]) &&
			((clock2[i] & masks[j]) == clock2[i]))
			possible[i].push_back(j);
//2
	i = 1;
	for( j = 0;j < 10;j++)
		if(((masks[j] & clock1[i]) == masks[j]) &&
			((clock2[i] & masks[j]) == clock2[i]))
			possible[i].push_back(j);
//3
	i = 2;
	for(j = 0;j < 6;j++)
		if(((masks[j] & clock1[i]) == masks[j]) &&
			((clock2[i] & masks[j]) == clock2[i]))
			possible[i].push_back(j);
//4
	i = 3;
	for( j = 0;j < 10;j++)
		if(((masks[j] & clock1[i]) == masks[j]) &&
			((clock2[i] & masks[j]) == clock2[i]))
			possible[i].push_back(j);

	map<char,vector<int> > count[4];
//1
	i = 0;
	for( j = 1;j < 3;j++)
	{
		if(count[i].count(char(masks[j] & rabotesti[i])) != 0)
			count[i][char(masks[j] & rabotesti[i])].push_back(j);
		else
			count[i][char(masks[j] & rabotesti[i])] = vector<int>(1,j);
	}
//2
	i = 1;
	for( j = 0;j < 10;j++)
	{
		if(count[i].count(char(masks[j] & rabotesti[i])) != 0)
			count[i][char(masks[j] & rabotesti[i])].push_back(j);
		else
			count[i][char(masks[j] & rabotesti[i])] = vector<int>(1,j);
	}
//3
	i = 2;
	for(j = 0;j < 6;j++)
	{
		if(count[i].count(char(masks[j] & rabotesti[i])) != 0)
			count[i][char(masks[j] & rabotesti[i])].push_back(j);
		else
			count[i][char(masks[j] & rabotesti[i])] = vector<int>(1,j);
	}
//4
	i = 3;
	for( j = 0;j < 10;j++)
	{
		if(count[i].count(char(masks[j] & rabotesti[i])) != 0)
			count[i][char(masks[j] & rabotesti[i])].push_back(j);
		else
			count[i][char(masks[j] & rabotesti[i])] = vector<int>(1,j);
	}

//	bool possible4 = false;
	map<char,vector<int> >::iterator it;
/*	for( it = count[3].begin();it != count[3].end();it++)
	{
		if((*it).second.size() == 1)
			possible4 = true;
	}
	if(possible4 == false)
	{
		printf("%d",-1);
		return 0;
	}
	bool possible2 = false;*/
	for(i = 0;i < 4;i++)
		for(it = count[i].begin();it != count[i].end();it++)
		{
			if((*it).second.size() == 1)
			{
				guess[i].push_back((*it).second[0]);
			}
		}
	/*if(guess[3].size() < 1)
	{
		printf("%d",-1);
		return 0;
	}*/
	if(guess[1].size() < 1)
	{
		printf("%d",-1);
		return 0;
	}

	//int a,b,c,d;
	//queue< Timer > timers;
	vector<int>::iterator it1;

	if(guess[0].size() == 0)
	{
		guess[0].resize(2);// = vector<int>(2);
		for(i = 1;i < 3;i++)
			guess[0][i] = i;
	
	}
	if(guess[2].size() == 0)
	{
		guess[2].resize(6);
		for(i = 0;i < 6;i++)
			guess[2][i] = i;
	}
	if(guess[2].size() == 0)
	{
		guess[2].resize(10);
		for(i = 0;i < 10;i++)
			guess[2][i] = i;
	}
#ifdef DEBUG
/*	for(it1 = guess[0].begin();it1 != guess[0].end();it1++)
	{
			
		printf("1:%d\n",*it1);

	}
	for(it1 = guess[1].begin();it1 != guess[1].end();it1++)
	{
		printf("2:%d\n",*it1);
	}
	for(it1 = guess[2].begin();it1 != guess[2].end();it1++)
	{
		printf("3:%d\n",*it1);
	}
	for(it1 = guess[3].begin();it1 != guess[3].end();it1++)
	{
		printf("4:%d\n",*it1);
	}*/
#endif
	vector< Timer* > posstime;

	for(it1 = guess[0].begin();it1 != guess[0].end();it1++)
	{
		for(vector<int>::iterator it2 = guess[1].begin();it2 != guess[1].end();it2++)
		{
			for(vector<int>::iterator it3 = guess[2].begin();it3 != guess[2].end();it3++)
			{
				for(vector<int>::iterator it4 = guess[3].begin();it4 != guess[3].end();it4++)
				{
					if(!((*it1 == 2) && (*it2 == 4)))
						posstime.push_back(new Timer(*it1,*it2,*it3,*it4));
/*#ifdef DEBUG
					if((*it1) != 0)
						printf("%d%d:%d%d\n",*it1,*it2,*it3,*it4);
				    else
						printf("%d:%d%d\n",*it2,*it3,*it4);
#endif*/
				}
			}
		}
	}

	vector< Timer* > begintime;
	for(it1 = possible[0].begin();it1 != possible[0].end();it1++)
	{
		for(vector<int>::iterator it2 = possible[1].begin();it2 != possible[1].end();it2++)
		{
			for(vector<int>::iterator it3 = possible[2].begin();it3 != possible[2].end();it3++)
			{
				for(vector<int>::iterator it4 = possible[3].begin();it4 != possible[3].end();it4++)
				{
					if(!((*it1 == 2) && (*it2 == 4)))
						begintime.push_back(new Timer(*it1,*it2,*it3,*it4));
#ifdef DEBUG
					/*if((*it1) != 0)
						printf("%d%d:%d%d\n",*it1,*it2,*it3,*it4);
				    else
						printf("%d:%d%d\n",*it2,*it3,*it4);*/
#endif
				}
			}
		}
	}

	int maxwait = 0;
	int min = 2*24*60;
	int wait = 0;
	for(vector<Timer*>::iterator itbeg = begintime.begin();itbeg != begintime.end();itbeg++)
	{
	
		min = 2*24*60;
		for(vector<Timer*>::iterator itposs = posstime.begin();itposs != posstime.end();itposs++)
		{
			wait = GetDiff(*itbeg,*itposs);
/*#ifdef DEBUG
			printf("time from %d%d:%d%d to %d%d:%d%d is %d\n",(*itbeg)->a,(*itbeg)->b,(*itbeg)->c,(*itbeg)->d,
				(*itposs)->a,(*itposs)->b,(*itposs)->c,(*itposs)->d,wait);
#endif*/
			if(wait < min)
				min = wait;
		}
		if(min > maxwait)
			maxwait = min;
	}
	printf("%d\n",maxwait);



#ifdef DEBUG
	fclose(stdin);
#endif
	return 0;
}

void input()
{
	char c[3];
	int row = 0;
	for( row = 0;row < 4;row++)
		clock2[row] = clock1[row] = 0;
	//1
	for( row = 0;row < 4;row++)
	{
		scanf("%s",&c[0]);
		switch(c[1])
		{
		case '.':
			//digits[row].parts[0] = 0;
			clock1[row] = 1 << 1;
			break;
		case '=':
		case '#':
			//digits[row].parts[0] = 1;
			rabotesti[row] = clock2[row] = clock1[row] = 1 << 1;
			break;
		case '|':
		case '-':
			//digits[row].parts[0] = 2;
			rabotesti[row] = 1 << 1;
			clock1[row] = 0;
			break;
		}
	}
//2
	for(row = 0;row < 4;row++)
	{
		scanf("%s",&c[0]);
		switch(c[0])
		{
		case '.':
			//digits[row].parts[1] = 0;
			clock1[row] |= 1 << 2;
			break;
		case '=':
		case '#':
			//digits[row].parts[1] = 1;
			clock2[row]|= 1 << 2;
			clock1[row] |= 1 << 2;
			rabotesti[row] |= 1 << 2;
			break;
		case '|':
		case '-':
			//digits[row].parts[1] = 2;
			clock1[row] |= 0;
			rabotesti[row] |= 1 << 2;
			break;
		}
		switch(c[2])
		{
		case '.':
			//digits[row].parts[2] = 0;
			clock1[row] |= 1 << 3;
			break;
		case '=':
		case '#':
			//digits[row].parts[2] = 1;
			clock2[row] |= 1 << 3;
			clock1[row] |= 1 << 3;
			rabotesti[row] |= 1 << 3;
			break;
		case '|':
		case '-':
			//digits[row].parts[2] = 2;
			clock1[row] |= 0;
			rabotesti[row] |= 1 << 3;
			break;
		}
	}

//3
	for(row = 0;row < 4;row++)
	{
		scanf("%s",&c[0]);
		switch(c[1])
		{
		case '.':
			//digits[row].parts[3] = 0;
			clock1[row] |= 1 << 4;
			break;
		case '=':
		case '#':
			//digits[row].parts[3] = 1;
			clock2[row] |= 1 << 4;
			clock1[row] |= 1 << 4;
			rabotesti[row] |= 1 << 4;
			break;
		case '|':
		case '-':
			//digits[row].parts[3] = 2;
			clock1[row] |= 0;
			rabotesti[row] |= 1 << 4;
			break;
		}
	}

	//4

	for(row = 0;row < 4;row++)
	{
		scanf("%s",&c[0]);
		switch(c[0])
		{
		case '.':
			//digits[row].parts[4] = 0;
			clock1[row] |= 1 << 5;
			break;
		case '=':
		case '#':
			//digits[row].parts[4] = 1;
			clock2[row] |= 1 << 5;
			clock1[row] |= 1 << 5;
			rabotesti[row] |= 1 << 5;
			break;
		case '|':
		case '-':
			//digits[row].parts[4] = 2;
			clock1[row] |= 0;
			rabotesti[row] |= 1 << 5;
			break;
		}
		switch(c[2])
		{
		case '.':
			//digits[row].parts[5] = 0;
			clock1[row] |= 1 << 6;
			break;
		case '=':
		case '#':
			//digits[row].parts[5] = 1;
			clock2[row] |= 1 << 6;
			clock1[row] |= 1 << 6;
			rabotesti[row] |= 1 << 6;
			break;
		case '|':
		case '-':
			//digits[row].parts[5] = 2;
			clock1[row] |= 0;
			rabotesti[row] |= 1 << 6;
			break;
		}
	}
	//5
	for(row = 0;row < 4;row++)
	{
		scanf("%s",&c[0]);
		switch(c[1])
		{
		case '.':
			//digits[row].parts[6] = 0;
			clock1[row] |= 1 << 7;
			break;
		case '=':
		case '#':
			//digits[row].parts[6] = 1;
			clock2[row] |= 1 << 7;
			clock1[row] |= 1 << 7;
			rabotesti[row] |= 1 << 7;
			break;
		case '|':
		case '-':
			//digits[row].parts[6] = 2;
			clock1[row] |= 0;
			rabotesti[row] |= 1 << 7;
			break;
		}
	}
	return;
}

