#include <bits/stdc++.h>
using namespace std;
int read() {
  char ch;
  for (ch = getchar(); ch < '0' || ch > '9'; ch = getchar())
    ;
  int x = ch - '0';
  for (ch = getchar(); ch >= '0' && ch <= '9'; ch = getchar())
    x = x * 10 + ch - '0';
  return x;
}
void write(int x) {
  if (!x) {
    puts("0");
    return;
  }
  char ch[20];
  int tot = 0;
  for (; x; x /= 10) ch[++tot] = x % 10 + '0';
  for (int i = tot; i >= 1; i--) putchar(ch[i]);
  puts("");
}
const int N = 2e5 + 5, S = (1 << 14), M = 388;
int n, k, q, m, ans, cnt, tot, a[N], b[N], c[N], p[N], L[N], R[N], lim[N];
char opt[5];
vector<int> d[N];
void put() {
  if (cnt != k - 1) {
    puts("-1");
    return;
  }
  write(n - ans);
}
void init() {
  n = read();
  k = read();
  q = read();
  m = n - k + 1;
  for (int i = 1; i <= n; i++) a[i] = read();
  for (int i = 1; i <= n; i++) b[i] = read();
  for (int i = 1; i <= n; i++) c[i] = a[i] ^ b[i];
  for (int i = 1; i <= n; i++) d[i % k].push_back(c[i] ^ c[i - 1]);
  ans = cnt = tot = 0;
  for (int i = 0; i <= k - 1; i++) {
    L[i] = tot + 1;
    for (int j = 0; j < d[i].size(); j++) {
      int z = j * k + ((!i) ? k : i);
      if (j) d[i][j] ^= d[i][j - 1];
      p[++tot] = d[i][j];
      ans += !p[tot];
    }
    R[i] = tot;
    lim[i] = tot + 1;
    for (int j = L[i]; j <= R[i]; j++) {
      int z = (j - L[i]) * k + ((!i) ? k : i);
      if (z > m) {
        lim[i] = j;
        break;
      }
    }
    for (int j = lim[i]; j <= R[i]; j++)
      if (!p[j]) cnt++;
  }
}
int sz, ls[N], rs[N], pos[N], tag[N], w[N / M + 5][S];
void pre() {
  sz = n / M + ((n % M) > 0);
  for (int i = 1; i <= sz; i++) {
    ls[i] = rs[i - 1] + 1;
    rs[i] = min(ls[i] + M, n);
    for (int j = ls[i]; j <= rs[i]; j++) w[i][p[j]]++, pos[j] = i;
  }
}
void add(int l, int r, int val) {
  int u = pos[l], v = pos[r];
  if (u == v) {
    for (int i = l; i <= r; i++) w[v][p[i]]--, p[i] ^= val, w[v][p[i]]++;
    return;
  }
  for (int i = u + 1; i <= v - 1; i++) tag[i] ^= val;
  for (int i = l; i <= rs[u]; i++) w[u][p[i]]--, p[i] ^= val, w[u][p[i]]++;
  for (int i = ls[v]; i <= r; i++) w[v][p[i]]--, p[i] ^= val, w[v][p[i]]++;
}
int calc(int l, int r) {
  if (l > r) return 0;
  int u = pos[l], v = pos[r], ret = 0;
  if (u == v) {
    for (int i = l; i <= r; i++) ret += p[i] == tag[v];
    return ret;
  }
  for (int i = u + 1; i <= v - 1; i++) ret += w[i][tag[i]];
  for (int i = l; i <= rs[u]; i++) ret += p[i] == tag[u];
  for (int i = ls[v]; i <= r; i++) ret += p[i] == tag[v];
  return ret;
}
void modify(int x, int y) {
  if (x > n) return;
  int t = x % k, s = (x - 1) / k + L[t];
  cnt -= calc(lim[t], R[t]);
  ans -= calc(L[t], R[t]);
  add(s, R[t], y);
  ans += calc(L[t], R[t]);
  cnt += calc(lim[t], R[t]);
}
void solve() {
  put();
  for (; q; q--) {
    scanf("%s", opt);
    int x = read(), y = read();
    if (opt[0] == 'a') modify(x, a[x] ^ y), modify(x + 1, a[x] ^ y), a[x] = y;
    if (opt[0] == 'b') modify(x, b[x] ^ y), modify(x + 1, b[x] ^ y), b[x] = y;
    put();
  }
}
int main() {
  init();
  pre();
  solve();
  return 0;
}
