#include <bits/stdc++.h>
using namespace std;
const int matrix_size = 40;
const long long INF = 0x3f3f3f3f3f3f3f3f;
struct matrix {
  long long mat[matrix_size + 5][matrix_size + 5];
  matrix() {
    for (int j = 0; j <= matrix_size; j++) {
      for (int k = 0; k <= matrix_size; k++) {
        mat[j][k] = INF;
      }
    }
  }
};
matrix operator*(matrix a, matrix b) {
  matrix ans;
  int j, k, i;
  for (j = 0; j <= matrix_size; j++) {
    for (k = 0; k <= matrix_size; k++) {
      for (i = 0; i <= matrix_size; i++) {
        if (a.mat[j][i] != INF && b.mat[i][k] != INF) {
          ans.mat[j][k] = min(ans.mat[j][k], a.mat[j][i] + b.mat[i][k]);
        }
      }
    }
  }
  return ans;
}
matrix operator^(matrix a, int b) {
  matrix res;
  for (int j = 0; j <= matrix_size; j++) res.mat[j][j] = 0;
  while (b) {
    if (b & 1) res = res * a;
    a = a * a;
    b >>= 1;
  }
  return res;
}
int A[25], B[25];
long long dp[25][50];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int j = 1; j <= n; j++) scanf("%d", &A[j]);
  for (int j = 1; j <= n; j++) scanf("%d", &B[j]);
  matrix now;
  memset(dp, 63, sizeof(dp));
  dp[0][n] = 0;
  for (int j = 0; j <= matrix_size; j++) {
    for (int k = 0; k <= matrix_size; k++) {
      now.mat[j][k] = INF;
    }
  }
  for (int j = 0; j <= 2 * n; j++) {
    for (int k = 0; k <= 2 * n; k++) {
      memset(dp, 63, sizeof(dp));
      dp[0][j] = 0;
      for (int i = 1; i <= n; i++) {
        for (int a = 0; a < 2 * n; a++) {
          if (dp[i - 1][a + 1] == INF) continue;
          dp[i][a] = min(dp[i][a], dp[i - 1][a + 1] + B[i]);
        }
        for (int a = 2 * n; a >= 1; a--) {
          if (dp[i - 1][a - 1] == INF) continue;
          dp[i][a] = min(dp[i][a], dp[i - 1][a - 1] + A[i]);
        }
      }
      now.mat[j][k] = dp[n][k];
    }
  }
  cout << (now ^ m).mat[0][0] << endl;
  return 0;
}
