#include <bits/stdc++.h>
using namespace std;
void Freopen() {
  freopen(
      "title"
      ".in",
      "r", stdin);
  freopen(
      "title"
      ".out",
      "w", stdout);
}
long long read() {
  long long g = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || '9' < ch) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while ('0' <= ch && ch <= '9') {
    g = g * 10 + ch - '0';
    ch = getchar();
  }
  return g * f;
}
const long long N = 2e5 + 5;
const long long INF = 1e18;
long long exgcd(long long a, long long b, long long &x, long long &y) {
  if (!b) return x = 1, y = 0, a;
  long long d = exgcd(b, a % b, y, x);
  return y -= a / b * x, d;
}
vector<long long> g[N], b[N];
long long n, m, B, G, gc, s[N], d[N], p[N], cnt, ans;
long long solve(long long m, long long n, long long x, vector<long long> &g,
                vector<long long> &b) {
  if ((long long)g.size() == m) return -1;
  cnt = 0;
  for (long long i : g) s[++cnt] = i * x % m, d[cnt] = i, p[cnt] = cnt;
  for (long long i : b) s[++cnt] = i * x % m, d[cnt] = i, p[cnt] = cnt;
  sort(p + 1, p + cnt + 1, [](long long i, long long j) {
    return s[i] == s[j] ? i > j : s[i] < s[j];
  });
  s[p[0] = 0] = s[p[cnt]] - m, s[p[cnt + 1] = cnt + 1] = s[p[1]] + m;
  long long dis = INF, ans = 0;
  for (long long i = 1; i <= cnt; i++)
    dis = min(dis + n * (s[p[i]] - s[p[i - 1]]), d[p[i]]);
  for (long long i = 1; i <= cnt; i++) {
    dis = min(dis + n * (s[p[i]] - s[p[i - 1]]), d[p[i]]);
    if (s[p[i]] == s[p[i + 1]]) continue;
    if (s[p[i]] + 1 == s[p[i + 1]] && p[i] <= (long long)g.size()) continue;
    ans = max(ans, dis + n * (s[p[i + 1]] - s[p[i]] - 1));
  }
  return ans;
}
signed main() {
  n = read(), m = read();
  long long x, y;
  if ((gc = exgcd(m, n, x, y)) > 200000) return puts("-1"), signed();
  B = read();
  for (long long i = 1; i <= B; i++) {
    long long x = read();
    b[x % gc].push_back(x / gc);
  }
  G = read();
  for (long long i = 1; i <= G; i++) {
    long long x = read();
    g[x % gc].push_back(x / gc);
  }
  x = (x % n + n) % n, y = (y % m + m) % m;
  for (long long i = 0; i < gc; i++) {
    if (g[i].empty() && b[i].empty()) return puts("-1"), signed();
    ans = max(ans, solve(m / gc, n / gc, y, g[i], b[i]) * gc + i);
    ans = max(ans, solve(n / gc, m / gc, x, b[i], g[i]) * gc + i);
  }
  return cout << ans, signed();
}
