#include <bits/stdc++.h>
using namespace std;
using ll = long long;
static const ll NEG = -(1LL << 60);
static const int MOD = 998244353;
struct Cell {
ll val;
int cnt;
};
struct Mat {
Cell a[6][6];
};
int n, q;
vector<ll> a;
vector<int> col;
vector<Mat> st;
int sz;
int go[3][3];
inline int id(int r, int b) {
return r * 2 + b;
}
inline void relax(Cell &x, ll v, int c) {
if (c == 0) return;
if (v > x.val) {
x.val = v;
x.cnt = c;
} else if (v == x.val) {
int nv = x.cnt + c;
if (nv >= MOD) nv -= MOD;
x.cnt = nv;
}
}
Mat identity_mat() {
Mat m;
for (int i = 0; i < 6; ++i) {
for (int j = 0; j < 6; ++j) {
m.a[i][j] = {NEG, 0};
}
m.a[i][i] = {0, 1};
}
return m;
}
Mat leaf_mat(ll val, int c) {
Mat m;
for (int i = 0; i < 6; ++i)
for (int j = 0; j < 6; ++j)
m.a[i][j] = {NEG, 0};
for (int s = 0; s < 6; ++s) {
int r = s / 2;
int b = s % 2;
// skip current position
relax(m.a[s][id(r, 0)], 0, 1);
// take current position
if (b == 0) {
int nr = go[r][c];
if (nr != -1) {
relax(m.a[s][id(nr, 1)], val, 1);
}
}
}
return m;
}
Mat merge_mat(const Mat &L, const Mat &R) {
Mat res;
for (int i = 0; i < 6; ++i)
for (int j = 0; j < 6; ++j)
res.a[i][j] = {NEG, 0};
for (int i = 0; i < 6; ++i) {
for (int k = 0; k < 6; ++k) {
if (L.a[i][k].cnt == 0) continue;
ll lv = L.a[i][k].val;
int lc = L.a[i][k].cnt;
for (int j = 0; j < 6; ++j) {
if (R.a[k][j].cnt == 0) continue;
ll nv = lv + R.a[k][j].val;
int nc = int((1LL * lc * R.a[k][j].cnt) % MOD);
relax(res.a[i][j], nv, nc);
}
}
}
return res;
}
void build() {
for (int i = sz - 1; i >= 1; --i) {
st[i] = merge_mat(st[i << 1], st[i << 1 | 1]);
}
}
void update(int p, ll val, int c) {
int idx = sz + p - 1;
st[idx] = leaf_mat(val, c);
idx >>= 1;
while (idx) {
st[idx] = merge_mat(st[idx << 1], st[idx << 1 | 1]);
idx >>= 1;
}
}
pair<ll, int> get_answer() {
const Cell &base = st[1].a[id(0, 0)][0];
ll best = NEG;
int ways = 0;
for (int j = 0; j < 6; ++j) {
const Cell &x = st[1].a[id(0, 0)][j];
if (x.cnt == 0) continue;
if (x.val > best) {
best = x.val;
ways = x.cnt;
} else if (x.val == best) {
ways += x.cnt;
if (ways >= MOD) ways -= MOD;
}
}
return {best, ways};
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
go[0][0] = 0;
go[0][1] = 1;
go[0][2] = -1;
go[1][0] = 2;
go[1][1] = 1;
go[1][2] = -1;
go[2][0] = 2;
go[2][1] = -1;
go[2][2] = -1;
cin >> n >> q;
a.assign(n + 1, 0);
col.assign(n + 1, 0);
for (int i = 1; i <= n; ++i) cin >> a[i];
for (int i = 1; i <= n; ++i) cin >> col[i];
sz = 1;
while (sz < n) sz <<= 1;
st.assign(sz << 1, identity_mat());
for (int i = 1; i <= n; ++i) {
st[sz + i - 1] = leaf_mat(a[i], col[i]);
}
for (int i = n + 1; i <= sz; ++i) {
st[sz + i - 1] = identity_mat();
}
build();
while (q--) {
int type;
cin >> type;
if (type == 1) {
int x;
ll y;
cin >> x >> y;
a[x] = y;
update(x, a[x], col[x]);
} else if (type == 2) {
int x, y;
cin >> x >> y;
col[x] = y;
update(x, a[x], col[x]);
} else {
auto [mx, ways] = get_answer();
cout << mx << ' ' << ways << '\n';
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKc3RhdGljIGNvbnN0IGxsIE5FRyA9IC0oMUxMIDw8IDYwKTsKc3RhdGljIGNvbnN0IGludCBNT0QgPSA5OTgyNDQzNTM7CgpzdHJ1Y3QgQ2VsbCB7CiAgICBsbCB2YWw7CiAgICBpbnQgY250Owp9OwoKc3RydWN0IE1hdCB7CiAgICBDZWxsIGFbNl1bNl07Cn07CgppbnQgbiwgcTsKdmVjdG9yPGxsPiBhOwp2ZWN0b3I8aW50PiBjb2w7CnZlY3RvcjxNYXQ+IHN0OwppbnQgc3o7CgppbnQgZ29bM11bM107CgppbmxpbmUgaW50IGlkKGludCByLCBpbnQgYikgewogICAgcmV0dXJuIHIgKiAyICsgYjsKfQoKaW5saW5lIHZvaWQgcmVsYXgoQ2VsbCAmeCwgbGwgdiwgaW50IGMpIHsKICAgIGlmIChjID09IDApIHJldHVybjsKICAgIGlmICh2ID4geC52YWwpIHsKICAgICAgICB4LnZhbCA9IHY7CiAgICAgICAgeC5jbnQgPSBjOwogICAgfSBlbHNlIGlmICh2ID09IHgudmFsKSB7CiAgICAgICAgaW50IG52ID0geC5jbnQgKyBjOwogICAgICAgIGlmIChudiA+PSBNT0QpIG52IC09IE1PRDsKICAgICAgICB4LmNudCA9IG52OwogICAgfQp9CgpNYXQgaWRlbnRpdHlfbWF0KCkgewogICAgTWF0IG07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7ICsraSkgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNjsgKytqKSB7CiAgICAgICAgICAgIG0uYVtpXVtqXSA9IHtORUcsIDB9OwogICAgICAgIH0KICAgICAgICBtLmFbaV1baV0gPSB7MCwgMX07CiAgICB9CiAgICByZXR1cm4gbTsKfQoKTWF0IGxlYWZfbWF0KGxsIHZhbCwgaW50IGMpIHsKICAgIE1hdCBtOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA2OyArK2opCiAgICAgICAgICAgIG0uYVtpXVtqXSA9IHtORUcsIDB9OwoKICAgIGZvciAoaW50IHMgPSAwOyBzIDwgNjsgKytzKSB7CiAgICAgICAgaW50IHIgPSBzIC8gMjsKICAgICAgICBpbnQgYiA9IHMgJSAyOwoKICAgICAgICAvLyBza2lwIGN1cnJlbnQgcG9zaXRpb24KICAgICAgICByZWxheChtLmFbc11baWQociwgMCldLCAwLCAxKTsKCiAgICAgICAgLy8gdGFrZSBjdXJyZW50IHBvc2l0aW9uCiAgICAgICAgaWYgKGIgPT0gMCkgewogICAgICAgICAgICBpbnQgbnIgPSBnb1tyXVtjXTsKICAgICAgICAgICAgaWYgKG5yICE9IC0xKSB7CiAgICAgICAgICAgICAgICByZWxheChtLmFbc11baWQobnIsIDEpXSwgdmFsLCAxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBtOwp9CgpNYXQgbWVyZ2VfbWF0KGNvbnN0IE1hdCAmTCwgY29uc3QgTWF0ICZSKSB7CiAgICBNYXQgcmVzOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA2OyArK2opCiAgICAgICAgICAgIHJlcy5hW2ldW2pdID0ge05FRywgMH07CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyArK2kpIHsKICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDY7ICsraykgewogICAgICAgICAgICBpZiAoTC5hW2ldW2tdLmNudCA9PSAwKSBjb250aW51ZTsKICAgICAgICAgICAgbGwgbHYgPSBMLmFbaV1ba10udmFsOwogICAgICAgICAgICBpbnQgbGMgPSBMLmFbaV1ba10uY250OwogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDY7ICsraikgewogICAgICAgICAgICAgICAgaWYgKFIuYVtrXVtqXS5jbnQgPT0gMCkgY29udGludWU7CiAgICAgICAgICAgICAgICBsbCBudiA9IGx2ICsgUi5hW2tdW2pdLnZhbDsKICAgICAgICAgICAgICAgIGludCBuYyA9IGludCgoMUxMICogbGMgKiBSLmFba11bal0uY250KSAlIE1PRCk7CiAgICAgICAgICAgICAgICByZWxheChyZXMuYVtpXVtqXSwgbnYsIG5jKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXM7Cn0KCnZvaWQgYnVpbGQoKSB7CiAgICBmb3IgKGludCBpID0gc3ogLSAxOyBpID49IDE7IC0taSkgewogICAgICAgIHN0W2ldID0gbWVyZ2VfbWF0KHN0W2kgPDwgMV0sIHN0W2kgPDwgMSB8IDFdKTsKICAgIH0KfQoKdm9pZCB1cGRhdGUoaW50IHAsIGxsIHZhbCwgaW50IGMpIHsKICAgIGludCBpZHggPSBzeiArIHAgLSAxOwogICAgc3RbaWR4XSA9IGxlYWZfbWF0KHZhbCwgYyk7CiAgICBpZHggPj49IDE7CiAgICB3aGlsZSAoaWR4KSB7CiAgICAgICAgc3RbaWR4XSA9IG1lcmdlX21hdChzdFtpZHggPDwgMV0sIHN0W2lkeCA8PCAxIHwgMV0pOwogICAgICAgIGlkeCA+Pj0gMTsKICAgIH0KfQoKcGFpcjxsbCwgaW50PiBnZXRfYW5zd2VyKCkgewogICAgY29uc3QgQ2VsbCAmYmFzZSA9IHN0WzFdLmFbaWQoMCwgMCldWzBdOwogICAgbGwgYmVzdCA9IE5FRzsKICAgIGludCB3YXlzID0gMDsKICAgIGZvciAoaW50IGogPSAwOyBqIDwgNjsgKytqKSB7CiAgICAgICAgY29uc3QgQ2VsbCAmeCA9IHN0WzFdLmFbaWQoMCwgMCldW2pdOwogICAgICAgIGlmICh4LmNudCA9PSAwKSBjb250aW51ZTsKICAgICAgICBpZiAoeC52YWwgPiBiZXN0KSB7CiAgICAgICAgICAgIGJlc3QgPSB4LnZhbDsKICAgICAgICAgICAgd2F5cyA9IHguY250OwogICAgICAgIH0gZWxzZSBpZiAoeC52YWwgPT0gYmVzdCkgewogICAgICAgICAgICB3YXlzICs9IHguY250OwogICAgICAgICAgICBpZiAod2F5cyA+PSBNT0QpIHdheXMgLT0gTU9EOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiB7YmVzdCwgd2F5c307Cn0KCmludCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKCiAgICBnb1swXVswXSA9IDA7CiAgICBnb1swXVsxXSA9IDE7CiAgICBnb1swXVsyXSA9IC0xOwogICAgZ29bMV1bMF0gPSAyOwogICAgZ29bMV1bMV0gPSAxOwogICAgZ29bMV1bMl0gPSAtMTsKICAgIGdvWzJdWzBdID0gMjsKICAgIGdvWzJdWzFdID0gLTE7CiAgICBnb1syXVsyXSA9IC0xOwoKICAgIGNpbiA+PiBuID4+IHE7CiAgICBhLmFzc2lnbihuICsgMSwgMCk7CiAgICBjb2wuYXNzaWduKG4gKyAxLCAwKTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIGNpbiA+PiBhW2ldOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSBjaW4gPj4gY29sW2ldOwoKICAgIHN6ID0gMTsKICAgIHdoaWxlIChzeiA8IG4pIHN6IDw8PSAxOwogICAgc3QuYXNzaWduKHN6IDw8IDEsIGlkZW50aXR5X21hdCgpKTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIHsKICAgICAgICBzdFtzeiArIGkgLSAxXSA9IGxlYWZfbWF0KGFbaV0sIGNvbFtpXSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gbiArIDE7IGkgPD0gc3o7ICsraSkgewogICAgICAgIHN0W3N6ICsgaSAtIDFdID0gaWRlbnRpdHlfbWF0KCk7CiAgICB9CiAgICBidWlsZCgpOwoKICAgIHdoaWxlIChxLS0pIHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICBjaW4gPj4gdHlwZTsKICAgICAgICBpZiAodHlwZSA9PSAxKSB7CiAgICAgICAgICAgIGludCB4OwogICAgICAgICAgICBsbCB5OwogICAgICAgICAgICBjaW4gPj4geCA+PiB5OwogICAgICAgICAgICBhW3hdID0geTsKICAgICAgICAgICAgdXBkYXRlKHgsIGFbeF0sIGNvbFt4XSk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IDIpIHsKICAgICAgICAgICAgaW50IHgsIHk7CiAgICAgICAgICAgIGNpbiA+PiB4ID4+IHk7CiAgICAgICAgICAgIGNvbFt4XSA9IHk7CiAgICAgICAgICAgIHVwZGF0ZSh4LCBhW3hdLCBjb2xbeF0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGF1dG8gW214LCB3YXlzXSA9IGdldF9hbnN3ZXIoKTsKICAgICAgICAgICAgY291dCA8PCBteCA8PCAnICcgPDwgd2F5cyA8PCAnXG4nOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMDsKfQ==