#include <bits/stdc++.h>
using namespace std;
const int MAXZ = 40;
const unsigned inf = (~(unsigned)0) >> 1;
struct mat {
  unsigned r[MAXZ + 10][MAXZ + 10];
  void setup() {
    for (int i = 0; i <= MAXZ; i++)
      for (int j = 0; j <= MAXZ; j++) r[i][j] = inf;
  }
};
mat operator*(const mat& A, const mat& B) {
  mat C;
  for (int i = 0; i <= MAXZ; i++)
    for (int j = 0; j <= MAXZ; j++) {
      unsigned t = inf;
      for (int k = 0; k <= MAXZ; k++) t = min(t, A.r[i][k] + B.r[k][j]);
      C.r[i][j] = t;
    }
  return C;
}
int n, m;
unsigned a[22], b[22];
mat T, W;
mat make_mat(int x) {
  mat R;
  R.setup();
  for (int i = 0; i <= MAXZ; i++) {
    if (i + 1 <= MAXZ) R.r[i][i + 1] = a[x];
    if (i - 1 >= 0) R.r[i][i - 1] = b[x];
  }
  return R;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = 1; i <= n; i++) cin >> b[i];
  T = make_mat(1);
  for (int i = 2; i <= n; i++) T = T * make_mat(i);
  for (int i = 0; i <= MAXZ; i++)
    for (int j = 0; j <= MAXZ; j++) W.r[i][j] = inf;
  W.r[0][0] = 0;
  for (int j = m; j; j >>= 1, T = T * T)
    if (j & 1) W = W * T;
  cout << W.r[0][0] << endl;
}
