#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<vector>
#include<queue>
#include<map>
#include<string>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
long long int b1[2000],b2[2000],c[2000];
queue<long long int> q;
queue<long long int> q1;
long long int gcd(long long int x, long long int y) { return y == 0 ? x : gcd(y, x % y); }
int main() {
long long int n, x, y, i,m;
scanf("%lld%lld%lld%lld", &n, &x, &y, &m);
if (x == y) { printf("0"); return 0; }
for (i = 1;i <= m;i++) {
scanf("%lld", &b1[i]);
}
for (i = 1;i <= m;i++) {
scanf("%lld", &b2[i]);
if (x % b1[i] == 0) {
q.push(b2[i]);
q1.push(1);
c[i] = 1;
if(y%b2[i]==0) { printf("1"); return 0; }
}
}
while (q.size()) {
long long int num = q.front(), cnt=q1.front();
q.pop(); q1.pop();
for (i = 1;i <= m;i++) {
if (c[i] == 1) continue;
if (num * b1[i] / gcd(num, b1[i]) <= n) {
if (y % b2[i] == 0) { printf("%lld",cnt+1); return 0; }
q.push(b2[i]);
q1.push(cnt + 1);
c[i] = 1;
}
}
}
printf("-1");
return 0;
}