#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
void read(int &x) {
  x = 0;
  int f = 1;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') f = -f;
  for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  x *= f;
}
void print(int x) {
  if (x < 0) putchar('-'), x = -x;
  if (!x) return;
  print(x / 10), putchar(x % 10 + 48);
}
void write(int x) {
  if (!x)
    putchar('0');
  else
    print(x);
  putchar('\n');
}
const int maxn = 1e6 + 10;
const int inf = 1e9;
const double eps = 1e-8;
const int mod = 1e9 + 7;
const int B = 400;
int a[maxn], b[maxn], n, k, q;
int c[maxn], s[maxn], ans, res;
namespace pps {
void modify(int p, int x) {
  c[p] = x;
  for (int i = p; i <= n; i += k) {
    ans -= !(!s[i]);
    if (i + k > n) res -= !s[i];
    s[i] = c[i] ^ (i >= k ? s[i - k] : 0);
    if (i + k > n) res += !s[i];
    ans += !(!s[i]);
  }
}
void solve() {
  ans = n - ans;
  while (q--) {
    char op;
    int p, v;
    scanf("%c", &op), read(p), read(v);
    if (op == 'a')
      a[p] = v;
    else
      b[p] = v;
    modify(p, (a[p] ^ b[p]) ^ (a[p - 1] ^ b[p - 1]));
    p++;
    modify(p, (a[p] ^ b[p]) ^ (a[p - 1] ^ b[p - 1]));
    write(res == k ? ans : -1);
  }
}
}  // namespace pps
namespace modpps {
struct block {
  vector<int> r, bel, val, w;
  vector<vector<int> > t;
  int tag[600], m;
  void init(int x) {
    if (!x) x = k;
    m = 0;
    for (int i = x; i <= n; i += k) m++;
    r.resize(m + 2), bel.resize(m + 2);
    val.resize(m + 2), w.resize(m + 2);
    for (int i = 1; i <= m; i++) bel[i] = (i - 1) / B + 1;
    for (int i = m; i; i--) r[i] = bel[i] == bel[i + 1] ? r[i + 1] : i;
    for (int i = 1; i <= m; i++) {
      w[i] = s[(i - 1) * k + x];
      val[i] = c[(i - 1) * k + x];
    }
    vector<int> et(1 << 14, 0);
    for (int i = 0; i <= bel[m]; i++) t.push_back(et);
    for (int i = 1; i <= m; i++) t[bel[i]][w[i]]++;
  }
  void modify(int x, int v) {
    x = x / k + (x % k != 0);
    int _ = v ^ val[x];
    val[x] = v;
    v = _;
    res -= tag[bel[m]] == w[m];
    for (int i = x; i <= r[x]; i++) {
      t[bel[i]][w[i]]--;
      if (w[i] == tag[bel[i]]) ans--;
      w[i] ^= v;
      t[bel[i]][w[i]]++;
      if (w[i] == tag[bel[i]]) ans++;
    }
    for (int i = bel[x] + 1; i <= bel[m]; i++) {
      ans -= t[i][tag[i]];
      tag[i] ^= v;
      ans += t[i][tag[i]];
    }
    res += tag[bel[m]] == w[m];
  }
} s[402];
void solve() {
  for (int i = 0; i < k; i++) s[i].init(i);
  cerr << "OK" << endl;
  while (q--) {
    char op;
    int p, v;
    scanf("%c", &op), read(p), read(v);
    if (op == 'a')
      a[p] = v;
    else
      b[p] = v;
    s[p % k].modify(p, (a[p] ^ b[p]) ^ (a[p - 1] ^ b[p - 1]));
    p++;
    s[p % k].modify(p, (a[p] ^ b[p]) ^ (a[p - 1] ^ b[p - 1]));
    write(res == k ? n - ans : -1);
    if (q % 10000 == 0) cerr << q << endl;
  }
}
}  // namespace modpps
int main() {
  int st = clock();
  read(n), read(k), read(q);
  for (int i = 1; i <= n; i++) read(a[i]);
  for (int i = 1; i <= n; i++) read(b[i]);
  n++;
  for (int i = 1; i <= n; i++) c[i] = (a[i] ^ b[i]) ^ (a[i - 1] ^ b[i - 1]);
  for (int i = 1; i <= n; i++)
    s[i] = c[i] ^ (i >= k ? s[i - k] : 0), ans += !s[i];
  for (int i = n - k + 1; i <= n; i++) res += !s[i];
  write(res == k ? n - ans : -1);
  if (k > B)
    pps ::solve();
  else
    modpps ::solve();
  cerr << (double)(clock() - st) / 1e3 << endl;
  return 0;
}
