#include <bits/stdc++.h>
using namespace std;
const int N = 21;
int n, m;
long long a[N], b[N], dp[N][N];
struct mar {
  long long val[N][N];
  mar() { memset(val, 0, sizeof(val)); }
};
mar operator*(mar a, mar b) {
  mar c;
  for (int i = (0); i < (n + 1); ++i)
    for (int j = (0); j < (n + 1); ++j) {
      c.val[i][j] = 0x3f3f3f3f3f3f3f3f;
      for (int k = (0); k < (n + 1); ++k)
        c.val[i][j] = min(c.val[i][j], a.val[i][k] + b.val[k][j]);
    }
  return c;
}
mar kpow(mar a, long long b) {
  mar ans = a;
  b--;
  while (b) {
    if (b & 1) ans = ans * a;
    a = a * a;
    b >>= 1;
  }
  return ans;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = (1); i < (n + 1); ++i) scanf("%lld", &a[i]);
  for (int i = (1); i < (n + 1); ++i) scanf("%lld", &b[i]);
  mar ans;
  for (int cas = (0); cas < (n + 1); ++cas) {
    memset(dp, 0x3f, sizeof(dp));
    dp[0][cas] = 0;
    for (int i = (1); i < (n + 1); ++i)
      for (int j = (0); j < (n + 1); ++j) {
        if (j != 0) dp[i][j] = min(dp[i][j], dp[i - 1][j - 1] + a[i]);
        if (j != n) dp[i][j] = min(dp[i][j], dp[i - 1][j + 1] + b[i]);
      }
    for (int i = (0); i < (n + 1); ++i) ans.val[cas][i] = dp[n][i];
  }
  ans = kpow(ans, m);
  printf("%lld\n", ans.val[0][0]);
}
