#include <bits/stdc++.h>
using namespace std;
const long long INF = 0x3f3f3f3f;
const int N = 2e5 + 10;
const int M = 14;
const long long mod = 1e9 + 7;
const double eps = 1e-14;
const double PI = acos(-1.0);
bool debug = false;
const int B = 500;
short cnt[410][1 << 14];
vector<int> vc[N];
int v[N], a[N], b[N], sum_b[410], tot, suf_b[410];
char s[10];
struct Node {
  int sxor, l, r, suf;
} node[N];
struct Ans {
  int tot, sum;
} ans;
void init(int n, int k) {
  tot = 0, ans.tot = 0, ans.sum = n + 1;
  for (int i = 0; i < k; ++i) {
    node[i].l = tot + 1;
    node[i].sxor = 0;
    for (int be = 0, en; be < vc[i].size();) {
      en = be + B;
      if (en > vc[i].size()) {
        node[i].suf = node[i].sxor;
        en = vc[i].size();
        for (int j = be; j < en; ++j) {
          node[i].sxor ^= vc[i][j];
          if (!node[i].sxor) ans.sum--;
        }
      } else {
        sum_b[++tot] = 0;
        suf_b[tot] = node[i].sxor;
        for (int j = be; j < en; ++j) {
          sum_b[tot] ^= vc[i][j];
          cnt[tot][sum_b[tot]]++;
        }
        ans.sum -= cnt[tot][suf_b[tot]];
        node[i].sxor ^= sum_b[tot];
      }
      be = en;
    }
    node[i].r = tot;
    if (node[i].sxor) ans.tot++;
  }
}
void solve(int id, int p, int x) {
  if (!node[id].sxor) ans.tot++;
  node[id].sxor ^= x;
  if (!node[id].sxor) ans.tot--;
  int be = p / B * B, en = be + B, now, iid = node[id].l + p / B;
  if (en > vc[id].size()) {
    en = vc[id].size();
    now = node[id].suf;
    for (int i = be; i < en; ++i) {
      now ^= vc[id][i];
      if (!now) ans.sum++;
    }
    vc[id][p] ^= x;
    now = node[id].suf;
    for (int i = be; i < en; ++i) {
      now ^= vc[id][i];
      if (!now) ans.sum--;
    }
  } else {
    ans.sum += cnt[iid][suf_b[iid]];
    now = 0;
    for (int i = be; i < en; ++i) {
      now ^= vc[id][i];
      cnt[iid][now]--;
    }
    now = 0;
    vc[id][p] ^= x;
    for (int i = be; i < en; ++i) {
      now ^= vc[id][i];
      cnt[iid][now]++;
    }
    sum_b[iid] = now;
    ans.sum -= cnt[iid][suf_b[iid]];
    iid++;
    be += B;
    while (iid <= node[id].r) {
      ans.sum += cnt[iid][suf_b[iid]];
      suf_b[iid] ^= x;
      ans.sum -= cnt[iid][suf_b[iid]];
      iid++;
      be += B;
    }
    now = node[id].suf, en = vc[id].size();
    for (int i = be; i < en; ++i) {
      now ^= vc[id][i];
      if (!now) ans.sum++;
    }
    node[id].suf ^= x;
    now = node[id].suf;
    for (int i = be; i < en; ++i) {
      now ^= vc[id][i];
      if (!now) ans.sum--;
    }
  }
}
void pri() {
  if (ans.tot)
    puts("-1");
  else
    printf("%d\n", ans.sum);
}
int main() {
  int n, k, q;
  scanf("%d%d%d", &n, &k, &q);
  for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
  for (int i = 1; i <= n; ++i) scanf("%d", &b[i]);
  for (int i = 1; i <= n; ++i) v[i] = a[i] ^ b[i];
  for (int i = 0; i <= n; ++i) v[i] = v[i] ^ v[i + 1];
  for (int i = 0; i <= n; ++i) vc[i % k].push_back(v[i]);
  init(n, k);
  pri();
  while (q--) {
    int p, xx, x;
    scanf("%s%d%d", s, &p, &xx);
    if (s[0] == 'a')
      x = a[p] ^ xx, a[p] = xx;
    else
      x = b[p] ^ xx, b[p] = xx;
    solve((p - 1) % k, (p - 1) / k, x);
    solve(p % k, p / k, x);
    pri();
  }
  return 0;
}
