#include<bits/stdc++.h>
using namespace std;
const int w=10000;
const int maxn=1e6+5;
char a[w]; char b[w]; char c[w];
bool ab[maxn]; bool ac[maxn]; bool bc[maxn];
bool match(char x,char y)
{
	return (x=='?')||(y=='?')||(x==y);
}
int main(void)
{
	scanf("%s%s%s",a,b,c);
	int la=strlen(a); int lb=strlen(b); int lc=strlen(c);
	for(int i=0;i<la;i++) for(int j=0;j<lb;j++) if(match(a[i],b[j])==false) ab[i-j+w]=true;
	for(int i=0;i<la;i++) for(int j=0;j<lc;j++) if(match(a[i],c[j])==false) ac[i-j+w]=true;
	for(int i=0;i<lb;i++) for(int j=0;j<lc;j++) if(match(b[i],c[j])==false) bc[i-j+w]=true;
	int res=4*w;
	for(int i=-4000;i<=4000;i++)
	{
		for(int j=-4000;j<=4000;j++)
		{
			if(ab[i+w]==false&&ac[j+w]==false&&bc[j-i+w]==false)
			{
				int L=min(0,min(i,j));
				int R=max(la,max(i+lb,j+lc));
//				if(R-L<10) printf("L==%d,R==%d,i==%d,j==%d,R-L==%d\n",L,R,i,j,R-L);
				res=min(res,R-L);
			}
		}
	}
	printf("%d\n",res);
	return 0;
}