#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <map>
#include <deque>
#include <cstring>
using namespace std;

#define REP(i,n) for(int i = 0; i < n; i++)
#define ALL(v) v.begin(),v.end()
typedef long long ll;
typedef pair<int,int> pi;
typedef pair<ll,ll> pll;
typedef pair<string,string> pss;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<pi> vpi;
typedef vector<ll> vll;
typedef vector<vll> vvll;

double EPS = 1e-9;
int INFi = 1000000005;
long long INFll = 1000000000000000005ll;
double PI = acos(-1);
int dirx[8] = {-1,0,0,1,-1,-1,1,1};
int diry[8] = {0,1,-1,0,-1,1,-1,1};
ll MOD = 1000000007;

int main(){
  int n, cc;
  cin >> n >> cc;
  int d[cc][cc];
  int c[n][n];
  REP(i,cc)REP(j,cc) cin >> d[i][j];
  REP(i,n) REP(j,n){
    cin >> c[i][j];
    c[i][j]--;
  }

  int n1[cc], n2[cc], n3[cc];
  REP(i,cc){
    n1[i] = 0;
    n2[i] = 0;
    n3[i] = 0;
  }

  REP(i,n) REP(j,n){
    if((i+j)%3 == 1){
      n1[c[i][j]]++;
    }else if((i+j)%3 == 2){
      n2[c[i][j]]++;
    }else{
      n3[c[i][j]]++;
    }
  }

  //sum1

  ll min1[3];
  int mini1[3];
  REP(i,3){
    min1[i] = INFi;
    mini1[i] = 0;
  }

  REP(i,cc){
    ll sum1 = 0;
    REP(j,cc){
      sum1 += d[j][i] * n1[j];
    }
    if(sum1 < min1[0]){
      min1[2] = min1[1];
      min1[1] = min1[0];
      min1[0] = sum1;

      mini1[2] = mini1[1];
      mini1[1] = mini1[0];
      mini1[0] = i;
    }else if(sum1 < min1[1]){
      min1[2] = min1[1];
      min1[1] = sum1;

      mini1[2] = mini1[1];
      mini1[1] = i;
    }else if(sum1 < min1[2]){
      min1[2] = sum1;

      mini1[2] = i;
    }
  }

  //sum2

  ll min2[3];
  int mini2[3];
  REP(i,3){
    min2[i] = INFi;
    mini2[i] = 0;
  }



  REP(i,cc){
    ll sum1 = 0;
    REP(j,cc){
      sum1 += d[j][i] * n2[j];
    }
    if(sum1 < min2[0]){
      min2[2] = min2[1];
      min2[1] = min2[0];
      min2[0] = sum1;

      mini2[2] = mini2[1];
      mini2[1] = mini2[0];
      mini2[0] = i;
    }else if(sum1 < min2[1]){
      min2[2] = min2[1];
      min2[1] = sum1;

      mini2[2] = mini2[1];
      mini2[1] = i;
    }else if(sum1 < min2[2]){
      min2[2] = sum1;

      mini2[2] = i;
    }
  }

  //sum3

  ll min3[3];
  int mini3[3];
  REP(i,3){
    min3[i] = INFi;
    mini3[i] = 0;
  }


  REP(i,cc){
    ll sum1 = 0;
    REP(j,cc){
      sum1 += d[j][i] * n3[j];
    }
    if(sum1 < min3[0]){
      min3[2] = min3[1];
      min3[1] = min3[0];
      min3[0] = sum1;

      mini3[2] = mini3[1];
      mini3[1] = mini3[0];
      mini3[0] = i;
    }else if(sum1 < min3[1]){
      min3[2] = min3[1];
      min3[1] = sum1;

      mini3[2] = mini3[1];
      mini3[1] = i;
    }else if(sum1 < min3[2]){
      min3[2] = sum1;

      mini3[2] = i;
    }
  }

  ll ans = INFi;

  REP(i,3){
    REP(j,3){
      REP(k,3){
        if(mini1[i] == mini2[j] || mini2[j] == mini3[k] || mini3[k] == mini1[i])continue;
        ans = min(ans, min1[i]+min2[j]+min3[k]);
      }
    }
  }

  cout << ans << endl;

  // ll min2[2];
  // int mini2[2];
  // REP(i,2){
  //   min2[i] = INFi;
  //   mini2[i] = 0;
  // }
//
  // int used;
  //
  // //sum2
  // REP(k,3){
  //   used = mini1[k];
  //
  //   REP(i,cc){
  //     if(i == used)continue;
  //     ll sum2 = 0;
  //     REP(j,cc){
  //       sum2 += d[j][i] * n2[j];
  //     }
  //     if(sum2 < min2[0]){
  //
  //       min2[1] = min2[0];
  //       min2[0] = sum2;
  //
  //
  //       mini2[1] = mini2[0];
  //       mini2[0] = i;
  //     }else if(sum2 < min2[1]){
  //
  //       min2[1] = sum2;
  //
  //
  //       mini2[1] = i;
  //     }
  //   }
  // }
  //
  // //sum3
  //
  // ll min2[2];
  // int mini2[2];
  // REP(i,2){
  //   min2[i] = INFi;
  //   mini2[i] = 0;
  // }
  //
  // int used;
  //
  // //sum2
  // REP(k,3){
  //   used = mini1[k];
  //
  //   REP(i,cc){
  //     if(i == used)continue;
  //     ll sum2 = 0;
  //     REP(j,cc){
  //       sum2 += d[j][i] * n2[j];
  //     }
  //     if(sum2 < min2[0]){
  //
  //       min2[1] = min2[0];
  //       min2[0] = sum2;
  //
  //
  //       mini2[1] = mini2[0];
  //       mini2[0] = i;
  //     }else if(sum2 < min2[1]){
  //
  //       min2[1] = sum2;
  //
  //
  //       mini2[1] = i;
  //     }
  //   }
  // }
  //
  //

  return 0;
}


Measured memory_bytes: 1280