#include <bits/stdc++.h>
using namespace std;
const int oo = 0x3f3f3f3f;
const int MAX_N = 23;
int N, M, A[MAX_N], B[MAX_N];
long long Z[MAX_N][MAX_N], DP[MAX_N][MAX_N];
void BuildZ() {
  memset(Z, oo, sizeof(Z));
  for (int mask = 0; mask < (1 << N); ++mask) {
    int cost = 0, left = 0, right = 0;
    for (int i = 0, brackets = 0; i < N; ++i) {
      if (!((mask >> i) & 1)) {
        cost += A[i];
        ++brackets;
      } else {
        if (brackets == 0)
          ++left;
        else
          --brackets;
      }
    }
    for (int i = N - 1, brackets = 0; i >= 0; --i) {
      if ((mask >> i) & 1) {
        cost += B[i];
        ++brackets;
      } else {
        if (brackets == 0)
          ++right;
        else
          --brackets;
      }
    }
    Z[left][right] = min(Z[left][right], 1LL * cost);
  }
}
inline void Multiply(long long X[MAX_N][MAX_N], long long Y[MAX_N][MAX_N],
                     long long Result[MAX_N][MAX_N]) {
  long long P[MAX_N][MAX_N];
  memset(P, oo, sizeof(P));
  for (int left = 0; left <= N; ++left) {
    for (int right = 0; right <= N; ++right) {
      for (int middle1 = 0; middle1 <= N; ++middle1) {
        for (int middle2 = 0; middle2 <= N; ++middle2) {
          int newLeft = left + middle2 - min(middle1, middle2);
          int newRight = right + middle1 - min(middle1, middle2);
          if (newLeft <= N && newRight <= N)
            P[newLeft][newRight] =
                min(P[newLeft][newRight], X[left][middle1] + Y[middle2][right]);
        }
      }
    }
  }
  for (int left = 0; left <= N; ++left)
    for (int right = 0; right <= N; ++right)
      Result[left][right] = P[left][right];
}
inline void Pow(long long X[MAX_N][MAX_N], int Power,
                long long Result[MAX_N][MAX_N]) {
  long long Y[MAX_N][MAX_N];
  memset(Y, 0, sizeof(Y));
  for (int left = 0; left <= N; ++left)
    for (int right = 0; right <= N; ++right) Y[left][right] = X[left][right];
  if (Power > 1) {
    Pow(Y, Power / 2, Y);
    Multiply(Y, Y, Y);
    if (Power % 2 == 1) Multiply(Y, X, Y);
  }
  for (int left = 0; left <= N; ++left)
    for (int right = 0; right <= N; ++right)
      Result[left][right] = Y[left][right];
}
void Solve() {
  BuildZ();
  Pow(Z, M, DP);
}
void Read() {
  cin >> N >> M;
  for (int i = 0; i < N; ++i) cin >> A[i];
  for (int i = 0; i < N; ++i) cin >> B[i];
}
void Print() { cout << DP[0][0] << "\n"; }
int main() {
  Read();
  Solve();
  Print();
  return 0;
}
