#include <bits/stdc++.h>
using namespace std;
int N, M;
int A[50], B[50];
int dp[50][2 * 50];
int T[50][50];
int R[50][50];
int AUX[50][50];
const int OFFSET = 50;
void mult(int A[50][50], int B[50][50], int C[50][50]) {
  for (int i = 0; i <= N; i++)
    for (int j = 0; j <= N; j++) {
      C[i][j] = 2000000005;
      for (int k = 0; k <= N; k++)
        C[i][j] = min((long long)C[i][j], (long long)A[i][k] + B[k][j]);
    }
}
void printMatrix(int T[50][50]) {
  for (int i = 0; i <= 2 * N; i++) {
    for (int j = 0; j <= 2 * N; j++)
      if (T[i][j] == 2000000005)
        printf("%3d", -1);
      else
        printf("%3d", T[i][j]);
    printf("\n");
  }
  printf("\n");
}
int main() {
  scanf("%d %d", &N, &M);
  for (int i = 0; i < N; i++) scanf("%d", &A[i]);
  for (int i = 0; i < N; i++) scanf("%d", &B[i]);
  for (int k = 0; k <= 2 * N; k++) {
    for (int i = 0; i <= N; i++)
      for (int j = 0; j < 2 * 50; j++) dp[i][j] = 2000000005;
    dp[0][k] = 0;
    for (int i = 0; i < N; i++)
      for (int j = 0; j < 2 * 50; j++)
        if (dp[i][j] < 2000000005) {
          dp[i + 1][j + 1] = min(dp[i + 1][j + 1], dp[i][j] + A[i]);
          if (j > 0) dp[i + 1][j - 1] = min(dp[i + 1][j - 1], dp[i][j] + B[i]);
        }
    for (int j = 0; j <= 2 * N; j++) T[k][j] = dp[N][j];
  }
  bool first = true;
  memset(R, 0, sizeof(R));
  N <<= 1;
  while (M > 0) {
    if (M & 1) {
      if (first)
        memcpy(R, T, sizeof(T));
      else {
        mult(R, T, AUX);
        memcpy(R, AUX, sizeof(AUX));
      }
      first = false;
    }
    mult(T, T, AUX);
    memcpy(T, AUX, sizeof(AUX));
    M >>= 1;
  }
  printf("%d\n", R[0][0]);
  return 0;
}
