#include <bits/stdc++.h>
using namespace std;
const long long int maxN = 30;
int n, m, a[30], b[30], dp[30][30][30];
bool vis[30][30][30];
int solve(int pos, int balance, int targ) {
  if (balance < 0 || balance > n) return 1 << 29;
  if (pos == n) {
    if (balance == targ)
      return 0;
    else
      return 1 << 29;
  }
  if (vis[pos][balance][targ]) return dp[pos][balance][targ];
  int op1 = a[pos] + solve(pos + 1, balance + 1, targ);
  int op2 = b[pos] + solve(pos + 1, balance - 1, targ);
  vis[pos][balance][targ] = 1;
  return dp[pos][balance][targ] = min(op1, op2);
}
struct mat {
  long long int _[maxN][maxN];
} A, B, C, D, I;
mat operator%(mat A, mat B) {
  memset(C._, 0x3f, sizeof C._);
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= n; j++)
      for (int k = 0; k <= n; k++) {
        C._[i][j] = min(C._[i][j], A._[i][k] + B._[k][j]);
      }
  return C;
}
mat operator^(mat A, int P) {
  memset(I._, 0x3f, sizeof I._);
  I._[0][0] = 0;
  while (P) {
    if (P & 1) {
      I = I % A;
    }
    A = A % A;
    P = P / 2;
  }
  return I;
}
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 i = 0; i <= n; i++)
    for (long long int j = 0; j <= n; j++) {
      D._[i][j] = solve(0, i, j);
    }
  D = D ^ m;
  printf("%I64d\n", D._[0][0]);
}
