#include <bits/stdc++.h>
using namespace std;
const int inf = 2000000000;
static inline int Rint() {
  struct X {
    int dig[256];
    X() {
      for (int i = '0'; i <= '9'; ++i) dig[i] = 1;
      dig['-'] = 1;
    }
  };
  static X fuck;
  int s = 1, v = 0, c;
  for (; !fuck.dig[c = getchar()];)
    ;
  if (c == '-')
    s = 0;
  else if (fuck.dig[c])
    v = c ^ 48;
  for (; fuck.dig[c = getchar()]; v = v * 10 + (c ^ 48))
    ;
  return s ? v : -v;
}
template <typename T>
static inline void cmax(T& a, const T& b) {
  if (b > a) a = b;
}
template <typename T>
static inline void cmin(T& a, const T& b) {
  if (b < a) a = b;
}
const int maxn = 100005;
int dp[64][64];
int cost[20][2];
int data[3][55][55];
int main() {
  const int n = Rint(), m = Rint();
  for (int i = (0); i < (n); ++i) cost[i][0] = Rint();
  for (int i = (0); i < (n); ++i) cost[i][1] = Rint();
  int(*mat)[55] = data[0];
  for (int i = 0; i <= 2 * n; ++i) {
    memset(dp, -1, sizeof dp);
    dp[0][i] = 0;
    for (int i = 0; i < n; ++i)
      for (int j = 0; j <= 2 * n; ++j)
        if (dp[i][j] >= 0) {
          const int u = cost[i % n][0];
          const int v = cost[i % n][1];
          int t = dp[i][j] + u;
          if (dp[i + 1][j + 1] == -1 || dp[i + 1][j + 1] > t)
            dp[i + 1][j + 1] = t;
          t = dp[i][j] + v;
          if (j)
            if (dp[i + 1][j - 1] == -1 || dp[i + 1][j - 1] > t)
              dp[i + 1][j - 1] = t;
        }
    for (int j = 0; j <= 2 * n; ++j) mat[i][j] = dp[n][j] >= 0 ? dp[n][j] : inf;
  }
  int dest = m;
  int ans = 1;
  {
    int(*m)[55] = mat;
    int(*r)[55] = data[1];
    int(*t)[55] = data[2];
    for (int i = 0; i <= 2 * n; ++i) r[i][0] = inf;
    r[0][0] = 0;
    for (; dest; dest >>= 1) {
      if (dest & 1) {
        for (int i = 0; i <= 2 * n; ++i) t[i][0] = inf;
        for (int i = 0; i <= 2 * n; ++i) {
          for (int k = 0; k <= 2 * n; ++k)
            if (r[i][0] < inf && m[i][k] < inf) {
              cmin(t[k][0], r[i][0] + m[i][k]);
            }
        }
        swap(t, r);
      }
      for (int i = 0; i <= 2 * n; ++i)
        for (int j = 0; j <= 2 * n; ++j) {
          t[i][j] = inf;
          for (int k = 0; k <= 2 * n; ++k)
            if (m[i][k] < inf && m[k][j] < inf) {
              int x = m[i][k] + m[k][j];
              if (x < t[i][j]) t[i][j] = x;
            }
        }
      swap(t, m);
    }
    printf("%d\n", r[0][0]);
  }
  return 0;
}
