#include <bits/stdc++.h>
using namespace std;
const int Mod = 1e9 + 7;
inline int FIX(long long a) { return (a % Mod + Mod) % Mod; }
const int N = 32;
int n, m, a[N], b[N];
int dp[N][2 * N][2 * N];
int MN = 40;
void update(int &dst, int val) {
  if (dst == -1)
    dst = val;
  else
    dst = min(dst, val);
}
struct Matrix {
  int M[41][41];
  Matrix operator*(const Matrix &T) {
    Matrix tmp;
    memset(tmp.M, -1, sizeof(tmp.M));
    for (int k = 0; k <= MN; k++)
      for (int i = 0; i <= MN; i++) {
        for (int j = 0; j <= MN; j++) {
          if (M[i][k] != -1 && T.M[k][j] != -1) {
            update(tmp.M[i][j], M[i][k] + T.M[k][j]);
          }
        }
      }
    return tmp;
  }
  void Init() {
    memset(M, 0, sizeof(M));
    for (int i = 0; i <= MN; i++) {
      for (int j = 0; j <= MN; j++)
        if (i != j) M[i][j] = -1;
    }
    return;
  }
};
Matrix MatrixPow(Matrix &T, int M) {
  Matrix ret;
  ret.Init();
  while (M > 0) {
    if (M & 1) ret = ret * T;
    T = T * T;
    M >>= 1;
  }
  return ret;
}
int main() {
  scanf("%d %d", &n, &m);
  MN = 2 * n;
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (int i = 1; i <= n; i++) scanf("%d", &b[i]);
  memset(dp, -1, sizeof(dp));
  for (int i = 0; i <= MN; i++) dp[0][i][i] = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j <= MN; j++) {
      for (int k = 0; k <= MN; k++) {
        if (dp[i][j][k] != -1) {
          if (k - 1 >= 0) update(dp[i + 1][j][k - 1], dp[i][j][k] + b[i + 1]);
          if (k + 1 <= 2 * n)
            update(dp[i + 1][j][k + 1], dp[i][j][k] + a[i + 1]);
        }
      }
    }
  }
  Matrix T;
  for (int i = 0; i <= MN; i++)
    for (int j = 0; j <= MN; j++) {
      T.M[i][j] = dp[n][i][j];
    }
  Matrix ret = MatrixPow(T, m);
  printf("%d\n", ret.M[0][0]);
  return 0;
}
