#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10, T = 1010, size = 1 << 20, mod = 998244353, inf = 2e9;
const long long INF = 1e15;
template <class o>
void qr(o &x) {
  char c = getchar();
  x = 0;
  int f = 1;
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) x = x * 10 + c - '0', c = getchar();
  x *= f;
}
template <class o>
void qw(o x) {
  if (x / 10) qw(x / 10);
  putchar(x % 10 + '0');
}
template <class o>
void pr1(o x) {
  if (x < 0) x = -x, putchar('-');
  qw(x);
  putchar(' ');
}
template <class o>
void pr2(o x) {
  if (x < 0) x = -x, putchar('-');
  qw(x);
  putchar('\n');
}
int n, k, m, Q, a[N], b[N], c[N], R[N], lim[N], val[N], id[N], tot, ans, cnt;
int bl[T], br[T], pos[N], w[T][1 << 14], tag[N];
void ask() {
  if (cnt)
    puts("-1");
  else
    pr2(ans);
}
void add(int x, int y, int z) {
  if (x > y) return;
  int p = pos[x], q = pos[y];
  if (p == q) {
    for (auto i = x; i <= y; i++) w[p][val[i]]--, w[p][val[i] ^= z]++;
    return;
  }
  for (auto i = p + 1; i <= q - 1; i++) tag[i] ^= z;
  for (auto i = x; i <= br[p]; i++) w[p][val[i]]--, w[p][val[i] ^= z]++;
  for (auto i = bl[q]; i <= y; i++) w[q][val[i]]--, w[q][val[i] ^= z]++;
}
int count(int x, int y) {
  if (x > y) return 0;
  int p = pos[x], q = pos[y], s = 0;
  if (p == q) {
    for (auto i = x; i <= y; i++) s += (val[i] != tag[p]);
    return s;
  }
  for (auto i = p + 1; i <= q - 1; i++) s += w[i][tag[i]];
  for (auto i = x; i <= br[p]; i++) s += (val[i] == tag[p]);
  for (auto i = bl[q]; i <= y; i++) s += (val[i] == tag[q]);
  return y - x + 1 - s;
}
void modify(int x, int y) {
  if (x > n) return;
  int z = x % k;
  cnt -= count(lim[z], R[z]);
  ans -= count(id[x], R[z]);
  add(id[x], R[z], y);
  cnt += count(lim[z], R[z]);
  ans += count(id[x], R[z]);
}
int main() {
  qr(n);
  qr(k);
  m = n - k + 1;
  qr(Q);
  for (auto i = 1; i <= n; i++) qr(a[i]);
  for (auto i = 1; i <= n; i++) qr(b[i]), c[i] = a[i] ^ b[i];
  for (auto i = n; i >= 1; i--) c[i] ^= c[i - 1];
  for (auto i = 0; i <= k - 1; i++) {
    int s = (n - i) / k + (i > 0), j, d = 0;
    for (j = !i ? k : i; s--; j += k) val[++tot] = d = c[j] ^ d, id[j] = tot;
    j -= k;
    R[i] = tot;
    if (j > m)
      lim[i] = tot, cnt += !!val[tot];
    else
      lim[i] = tot + 1;
  }
  for (auto i = 1; i <= tot; i++) ans += !!val[i];
  int len = max(sqrt(1.0 * n / k + 0.5), 1.0 * n / 1000), t = n / len;
  for (auto i = 1; i <= t; i++) bl[i] = br[i - 1] + 1, br[i] = i * len;
  if (R[t] < n) t++, bl[t] = br[t - 1] + 1, br[t] = n;
  for (auto i = 1; i <= t; i++)
    for (auto j = bl[i]; j <= br[i]; j++) pos[j] = i, w[i][val[j]]++;
  ask();
  while (Q--) {
    char s[5];
    int x, y;
    scanf("%s", s);
    qr(x);
    qr(y);
    if (s[0] == 'a')
      modify(x, a[x] ^ y), modify(x + 1, a[x] ^ y), a[x] = y;
    else
      modify(x, b[x] ^ y), modify(x + 1, b[x] ^ y), b[x] = y;
    ask();
  }
  return 0;
}
