#include <bits/stdc++.h>
using namespace std;
const int MAXN = 20 + 10;
int n, m, f[2][MAXN], g[MAXN][MAXN * 2][MAXN * 2], a[MAXN], b[MAXN];
struct Matrix {
  int num[MAXN][MAXN];
  Matrix() { memset(num, 0, sizeof(num)); }
  Matrix operator*(const Matrix &b) const {
    Matrix c;
    for (int i = 0; i <= n; ++i)
      for (int j = 0; j <= n; ++j) {
        c.num[i][j] = (int)2e+9;
        for (int k = 0; k <= n; ++k)
          if ((long long)num[i][k] + b.num[k][j] < (long long)c.num[i][j])
            c.num[i][j] = num[i][k] + b.num[k][j];
      }
    return c;
  }
} A, B;
Matrix Power(Matrix a, int b) {
  Matrix d;
  memset(d.num, 0x3f, sizeof(d.num));
  for (int i = 0; i <= n; ++i) d.num[i][i] = 0;
  for (; b; d = (b & 1) ? d * a : d, a = a * a, b /= 2)
    ;
  return d;
}
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) cin >> a[i];
  for (int i = 1; i <= n; ++i) cin >> b[i];
  memset(g, 0x3f, sizeof(g));
  g[0][n][n] = 0;
  for (int i = 0; i < n; ++i)
    for (int j = 0; j <= n * 2; ++j)
      for (int k = 0; k <= n * 2; ++k) {
        if (g[i][j][k] == 0x3f3f3f3f) continue;
        if (j - 1 >= 0)
          g[i + 1][j - 1][min(j - 1, k)] =
              min(g[i + 1][j - 1][min(j - 1, k)], g[i][j][k] + b[i + 1]);
        if (j + 1 <= n * 2)
          g[i + 1][j + 1][min(j + 1, k)] =
              min(g[i + 1][j + 1][min(j + 1, k)], g[i][j][k] + a[i + 1]);
      }
  for (int j = 0; j <= n * 2; ++j)
    for (int k = n * 2; k >= 0; --k)
      g[n][j][k] = min(g[n][j][k], g[n][j][k + 1]);
  memset(A.num, 0x3f, sizeof(A.num));
  A.num[0][0] = 0;
  for (int j = 1; j <= n; ++j) A.num[0][j] = (int)2e+9, f[0][j] = (int)2e+9;
  for (int k = 0; k <= n; ++k)
    for (int j = 0; j <= n; ++j) B.num[k][j] = g[n][j - k + n][n - k];
  B = Power(B, m);
  A = A * B;
  cout << A.num[0][0] << endl;
  fclose(stdin);
  fclose(stdout);
  return 0;
}
