#include <bits/stdc++.h>
using namespace std;
int n, m, d, kk, b[100005], g[100005], vb[100005], vg[100005], v[100005 << 1];
long long ans;
bool cmp(int x, int y) {
  return (x % d < y % d) || (x % d == y % d) && (x < y);
}
int exgcd(int x, int y, int &a, int &b) {
  if (!y) {
    a = 1;
    b = 0;
    return x;
  }
  int g = exgcd(y, x % y, b, a);
  b -= (x / y) * a;
  return g;
}
long long calc() {
  bool flag = (n <= vb[0] + vg[0]);
  long long ans = -1;
  if (flag) {
    for (int i = 0, j = 1, k = 1; i < n; i++) {
      if (((j > vb[0]) || (vb[j] != i)) && ((k > vg[0]) || (vg[k] != i))) {
        flag = 0;
        break;
      }
      if ((i < m) &&
          ((j > vb[0]) || (vb[j] != i) || (k > vg[0]) || (vg[k] != i)))
        ans = i;
      if ((j <= vb[0]) && (vb[j] == i)) j++;
      if ((k <= vg[0]) && (vg[k] == i)) k++;
    }
    if (flag) return ans;
    ans = 0;
  }
  v[0] = 0;
  for (int i = 1; i <= vb[0]; i++) v[++v[0]] = 1LL * vb[i] * kk % n;
  for (int i = 1; i <= vg[0]; i++) v[++v[0]] = 1LL * vg[i] * kk % n;
  sort(v + 1, v + v[0] + 1);
  if (v[1] == v[v[0]]) return 1LL * v[1] * m % n + 1LL * (n - 1) * m;
  ans = 1LL * v[v[0]] * m % n + ((v[1] - v[v[0]] + 1LL * kk * n) % n - 1) * m;
  for (int i = 1; i < v[0]; i++)
    if (v[i] != v[i + 1])
      ans = max(ans, 1LL * v[i] * m % n + ((v[i + 1] - v[i]) % n - 1LL) * m);
  return ans;
}
int main() {
  scanf("%d%d", &n, &m);
  d = exgcd(n, m, b[0], g[0]);
  n /= d;
  m /= d;
  if (n > m)
    kk = (g[0] % n + n) % n;
  else
    kk = (b[0] % m + m) % m;
  scanf("%d", &b[0]);
  for (int i = 1; i <= b[0]; i++) scanf("%d", &b[i]);
  scanf("%d", &g[0]);
  for (int i = 1; i <= g[0]; i++) scanf("%d", &g[i]);
  if (d > b[0] + g[0]) {
    printf("-1");
    return 0;
  }
  sort(b + 1, b + b[0] + 1, cmp);
  sort(g + 1, g + g[0] + 1, cmp);
  if (n < m) swap(n, m);
  for (int i = 0, j = 1, k = 1; i < d; i++) {
    vb[0] = vg[0] = 0;
    while ((j <= b[0]) && (b[j] % d == i)) vb[++vb[0]] = b[j++] / d;
    while ((k <= g[0]) && (g[k] % d == i)) vg[++vg[0]] = g[k++] / d;
    if ((!vb[0]) && (!vg[0])) {
      printf("-1");
      return 0;
    }
    ans = max(ans, calc() * d + i);
  }
  printf("%lld", ans);
}
