#include <bits/stdc++.h>
using namespace std;
long long a[10010], d[10010], f[10010];
bool b[10010];
long long B, p;
int n, m, tot;
long long gcd(long long x, long long y) {
  if (y == 0) return x;
  return gcd(y, x % y);
}
long long power(long long a, long long b) {
  long long c;
  if (b == 0) return 1;
  c = power(a, b / 2);
  if (b % 2 == 0)
    return (c * c) % p;
  else
    return (((c * c) % p) * a) % p;
}
int main() {
  long long x, ans;
  int i, j;
  scanf("%d%d%I64d", &n, &m, &p);
  for (i = 1; i <= n; i++) scanf("%I64d", &a[i]);
  B = p - 1;
  for (i = 1; i <= m; i++) {
    scanf("%I64d", &x);
    B = gcd(x, B);
  }
  for (i = 1; i <= n; i++) a[i] = power(a[i], B);
  tot = 0;
  for (i = 1; i * i <= p - 1; i++)
    if ((p - 1) % i == 0) {
      tot++;
      d[tot] = i;
      if (i * i < p - 1) {
        tot++;
        d[tot] = (p - 1) / i;
      }
    }
  sort(d + 1, d + tot + 1);
  memset(b, false, sizeof(b));
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= tot; j++)
      if (power(a[i], d[j]) == 1) {
        x = (p - 1) / d[j];
        break;
      }
    for (j = 1; j <= tot; j++)
      if (d[j] % x == 0) b[j] = true;
  }
  ans = 0;
  for (i = tot; i >= 1; i--) {
    f[i] += (p - 1) / d[i];
    for (j = 1; j <= i - 1; j++)
      if (d[i] % d[j] == 0) f[j] -= f[i];
    if (b[i]) ans += f[i];
  }
  printf("%I64d\n", ans);
  return 0;
}
