#include using namespace std; const long long INF = 1000000000000000000; vector add1(vector x, vector d){ int K = d.size(); vector ans(K); ans[0] = min(d[0], x[K - 1]); for (int i = 1; i < K; i++){ ans[i] = max(x[i - 1], min(d[i], x[K - 1])); } return ans; } vector mul2(vector x, vector d){ int K = d.size(); vector> next(K); next[0] = x; for (int i = 1; i < K; i++){ next[i] = add1(next[i - 1], d); } vector ans(K, -INF); for (int i = 0; i < K; i++){ for (int j = 0; j < K; j++){ ans[j] = max(ans[j], min(next[i][j], x[i])); } } return ans; } int main(){ int K; long long N; cin >> K >> N; vector A(K); for (int i = 0; i < K; i++){ cin >> A[i]; } vector B(K); for (int i = 0; i < K; i++){ cin >> B[i]; } vector C(K, -INF); C[0] = INF; for (int i = 60; i >= 0; i--){ C = mul2(C, B); if ((N >> i & 1) == 1){ C = add1(C, B); } } long long ans = -INF; for (int i = 0; i < K; i++){ ans = max(ans, min(A[i], C[i])); } cout << ans << endl; }