#include <iostream>
#include <cstring>

using namespace std;

int  a[6][6];
int  cur[6][6];
int  drops2[6][6][4];
int  drops[6][6][4];
int  dx[4]={1,0,-1,0};
int  dy[4]={0,1,0,-1};

bool ok()
{
          for(int i=1;i<=4;i++)
                    for(int  j=1;j<=4;j++)
                              if(cur[i][j])
                                        return 0;
          return 1;
}

void drop(int p1,int p2)
{
          if(cur[p1][p2]==0) return;
          memset(drops,0,sizeof(drops));
          cur[p1][p2]++;
          if(cur[p1][p2]>=5)
          {
                    cur[p1][p2]=0;
                    for(int  i=1;i<=4;i++)
                              drops[p1+dx[i-1]][p2+dy[i-1]][i-1]++;
                    for(int sec=0;sec<20;sec++)
                    {
                              if(ok())
                                        return;
                              memset(drops2,0,sizeof(drops2));
                              for(int  i=1;i<=4;i++)
                                        for(int  j=1;j<=4;j++)
                                        {
                                                  if(cur[i][j]!=0)
                                                  {
                                                            for(int  k=0;k<4;k++)
                                                            {
                                                                      cur[i][j]+=drops[i][j][k];
                                                                      drops[i][j][k]=0;
                                                            }
                                                            if(cur[i][j]>=5)
                                                            {
                                                                      cur[i][j]=0;
                                                                      for(int  k=0;k<4;k++)
                                                                      {
                                                                                if(i+dx[k]>=1 && i+dx[k]<=4 && j+dy[k]>=1 && j+dy[k]<=4)
                                                                                          drops2[i+dx[k]][j+dy[k]][k]++;
                                                                      }
                                                            }
                                                  }
                                                  else
                                                  {
                                                            for(int  k=0;k<4;k++)
                                                                      if(i+dx[k]>=1 && i+dx[k]<=4 && j+dy[k]>=1 && j+dy[k]<=4)
                                                                                drops2[i+dx[k]][j+dy[k]][k]+=drops[i][j][k];
                                                  }
                                        }
                    for(int pp1=0;pp1<=5;pp1++)
                              for(int pp2=0;pp2<=5;pp2++)
                                        for(int pp3=0;pp3<4;pp3++)
                                                  drops[pp1][pp2][pp3]=drops2[pp1][pp2][pp3];
                    }
          }
}

int main()
{
          //freopen("INPUT.txt","r",stdin);
          int okk=1;
          for(int  i=1;i<=4;i++)
                    for(int  j=1;j<=4;j++)
                    {
                              cin>>a[i][j];
                              if(a[i][j])
                                        okk=0;
                    }
                    if(okk)
                    {
                              cout<<0<<endl;
                              return 0;
                    }


          int  ans=6;
          for(int  i1=1;i1<=4;i1++)
                    for(int  j1=1;j1<=4;j1++)
                              for(int  i2=1;i2<=4;i2++)
                                        for(int  j2=1;j2<=4;j2++)
                                                  for(int  i3=1;i3<=4;i3++)
                                                            for(int  j3=1;j3<=4;j3++)
                                                                      for(int  i4=1;i4<=4;i4++)
                                                                                for(int  j4=1;j4<=4;j4++)
                                                                                          for(int  i5=1;i5<=4;i5++)
                                                                                                    for(int  j5=1;j5<=4;j5++)
                                                                                                    {
                                                                                                              for(int pp1=1;pp1<=4;pp1++)
                                                                                                              for(int pp2=1;pp2<=4;pp2++)
                                                                                                                        cur[pp1][pp2]=a[pp1][pp2];
                                                                                                              drop(i1,j1);
                                                                                                              if(ok())
                                                                                                                        ans=min(ans,1 );
                                                                                                              if(ans==1) {cout<<1<<endl; return 0;}
                                                                                                              drop(i2,j2);
                                                                                                              if(ok())
                                                                                                                        ans=min(ans,2 );
                                                                                                              if(ans==2) continue;
                                                                                                              drop(i3,j3);
                                                                                                              if(ok())
                                                                                                                        ans=min(ans,3);
                                                                                                              if(ans==3) continue;
                                                                                                              drop(i4,j4);
                                                                                                              if(ok())
                                                                                                                        ans=min(ans,4 );
                                                                                                              if(ans==4) continue;
                                                                                                              drop(i5,j5);
                                                                                                              if(ok())
                                                                                                                        ans=min(ans,5 );
                                                                                                    }
          if(ans==6)
                    cout<<-1<<endl;
          else
                    cout<<ans<<endl;

}



Measured memory_bytes: 3116