usingnamespace std; #define ll long long constint maxn = 131072 << 1;
namespace NTT { const ll mod = 998244353; const ll G = 3; const ll Gi = 332748118; ll a[maxn], b[maxn], c[maxn << 1]; int limit, limitBit, r[maxn << 1]; ll inv;
ll quickPow(ll x, ll k){ ll res = 1; while (k) { if (k & 1) res = res * x % mod; x = x * x % mod; k >>= 1; } return res; }
voidinit(int len){ limit = 1; while (limit <= (len * 2)) { limit <<= 1; limitBit++; } for (int i = 0; i < limit; i++) r[i] = (i & 1) * (limit >> 1) + (r[i >> 1] >> 1); inv = quickPow(limit, mod - 2); }
voidNTT(ll *A, bool isInverse){ for (int i = 0; i < limit; i++) if (i < r[i]) swap(A[i], A[r[i]]);
for (int k = 1; k < limit; k <<= 1) { ll unit = quickPow(isInverse ? Gi : G, (mod - 1) / (k << 1)); for (int i = 0; i < limit; i += (k << 1)) { for (ll j = i, g = 1; j < i + k; ++j, g = g * unit % mod) { ll x = A[j], y = g * A[j + k] % mod; A[j] = (x + y) % mod; A[j + k] = (x - y + mod) % mod; } } }
if (isInverse) { for (int i = 0; i < limit; ++i) { A[i] = A[i] * inv % mod; } } }
voidwork(){ NTT(a, false); NTT(b, false); for (int i = 0; i < limit; ++i) { c[i] = a[i] * b[i] % mod; } NTT(c, true); } }
int n, m; int a[maxn], b[maxn]; ll sumx2, sumy2, sumx, sumy;
ll calcC(ll A, ll B, ll C){ double x = -1.0 * (B) / (2 * A); ll xMin = floor(x), xMax = ceil(x); ll resMin = A * xMin * xMin + B * xMin + C; ll resMax = A * xMax * xMax + B * xMax + C; returnmin(resMin, resMax); }
ll calcXY(){ NTT::init(2 * n); for (int i = 0; i < n; ++i) { NTT::a[i] = NTT::a[i + n] = a[i]; NTT::b[i] = b[n - i - 1]; }
NTT::work(); ll res = 0; for (int i = n - 1; i < 2 * n; ++i) { res = max(res, NTT::c[i]); } return res; }
intmain(){ scanf("%d%d", &n, &m); for (int i = 0; i < n; ++i) { scanf("%lld", &a[i]); sumx += a[i]; sumx2 += a[i] * a[i]; } for (int i = 0; i < n; ++i) { scanf("%d", &b[i]); sumy += b[i]; sumy2 += b[i] * b[i]; }