#include <bits/stdc++.h>
const int Inf = 0x3f3f3f3f;
const int MN = 100005, MS = 1 << 18 | 7;
inline void chmin(int &x, int y) { x = x < y ? x : y; }
int N, M, Q;
char str[2][MN];
int Coef;
struct SegmentTree {
  int mycoef;
  struct dat {
    int f[2][2][2];
    int c[2][2];
    dat() {}
    dat(int v0, int v1) {
      f[0][0][0] = v0 + v1, f[0][1][1] = !v0 + !v1;
      f[1][0][0] = v0 + !v1, f[1][1][1] = !v0 + v1;
      f[0][0][1] = f[0][1][0] = f[1][0][1] = f[1][1][0] = Inf;
      c[0][v0] = 1, c[0][!v0] = 0;
      c[1][v1] = 1, c[1][!v1] = 0;
    }
    friend dat operator+(dat a, dat b) {
      dat c;
      for (int k = 0; k < 2; ++k)
        for (int x = 0; x < 2; ++x)
          for (int y = 0; y < 2; ++y) {
            c.f[k][x][y] = Inf;
            for (int z = 0; z < 2; ++z)
              for (int w = 0; w < 2; ++w)
                chmin(c.f[k][x][y],
                      a.f[k][x][z] + b.f[k][w][y] + (z != w) * Coef);
          }
      for (int k = 0; k < 2; ++k)
        for (int x = 0; x < 2; ++x) c.c[k][x] = a.c[k][x] + b.c[k][x];
      return c;
    }
  } tr[MS];
  int tag[MS];
  inline void P(int i, int rev) {
    tag[i] ^= rev;
    if (rev & 1) {
      std::swap(tr[i].c[0][0], tr[i].c[0][1]);
      std::swap(tr[i].c[1][0], tr[i].c[1][1]);
      for (int k = 0; k < 2; ++k)
        for (int y = 0; y < 2; ++y)
          std::swap(tr[i].f[k][0][y], tr[i].f[k][1][!y]);
      rev ^= 3;
    }
    if (rev & 2) {
      std::swap(tr[i].c[1][0], tr[i].c[1][1]);
      for (int x = 0; x < 2; ++x)
        for (int y = 0; y < 2; ++y)
          std::swap(tr[i].f[0][x][y], tr[i].f[1][x][y]);
    }
  }
  inline void Pushdown(int i) {
    if (tag[i]) P((i << 1), tag[i]), P(((i << 1) | 1), tag[i]), tag[i] = 0;
  }
  void Build(int i, int l, int r) {
    if (l == r) return tr[i] = dat(str[0][l] == 'R', str[1][l] == 'R'), void();
    Build((i << 1), l, ((l + r) >> 1)),
        Build(((i << 1) | 1), ((l + r) >> 1) + 1, r);
    Coef = mycoef, tr[i] = tr[(i << 1)] + tr[((i << 1) | 1)];
  }
  void Mdf(int i, int l, int r, int a, int b, int x) {
    if (r < a || b < l) return;
    if (a <= l && r <= b) return P(i, x), void();
    Pushdown(i), Mdf((i << 1), l, ((l + r) >> 1), a, b, x),
        Mdf(((i << 1) | 1), ((l + r) >> 1) + 1, r, a, b, x);
    Coef = mycoef, tr[i] = tr[(i << 1)] + tr[((i << 1) | 1)];
  }
} A, B;
inline int Ans() {
  int ret = Inf;
  for (int x = 0; x < 2; ++x)
    for (int y = 0; y < 2; ++y)
      chmin(ret, A.tr[1].f[0][x][y] + B.tr[1].c[0][!x] + B.tr[1].c[1][!y]);
  for (int x = 0; x < 2; ++x)
    for (int y = 0; y < 2; ++y)
      chmin(ret, B.tr[1].f[0][x][y] + A.tr[1].c[0][!x] + A.tr[1].c[1][!y]);
  return ret;
}
int main() {
  scanf("%d%d%d", &N, &M, &Q);
  scanf("%s%s", str[0] + 1, str[1] + 1), A.mycoef = M, A.Build(1, 1, N);
  scanf("%s%s", str[0] + 1, str[1] + 1), B.mycoef = N, B.Build(1, 1, M);
  printf("%d\n", Ans());
  while (Q--) {
    char s[3];
    int l, r;
    scanf("%s%d%d", s, &l, &r);
    if (*s == 'L') A.Mdf(1, 1, N, l, r, 1);
    if (*s == 'R') A.Mdf(1, 1, N, l, r, 2);
    if (*s == 'U') B.Mdf(1, 1, M, l, r, 1);
    if (*s == 'D') B.Mdf(1, 1, M, l, r, 2);
    printf("%d\n", Ans());
  }
  return 0;
}
