#include <algorithm>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
long long x[100001], y[100001];
int t[100001];
int gcd(int m, int n) {
while (n > 0) {
int r = m % n;
m = n;
n = r;
}
return m;
}
int getPhi(int n) {
int res = 1;
for (int i = 2; i * i <= n; i ++)
if (n % i == 0) {
res *= i - 1;
n /= i;
while (n % i == 0) {
res *= i;
n /= i;
}
}
if (n > 1) res *= n - 1;
return res;
}
int getPower(int a, int p, int modulo) {
if (p == 0) return 1;
int res = getPower(a, p / 2, modulo);
res = (long long)res * res % modulo;
if (p % 2 == 1) res = (long long)res * a % modulo;
return res;
}
int main() {
int n, a, b;
scanf("%d%d%d", &n, &a, &b);
for (int i = 0; i < n; i ++) scanf("%d", &t[i]);
t[n] = -t[n-1];
for (int i = n - 1; i >= 1; i --) t[i] = t[i] - t[i-1];
n ++;
int d = gcd(a, b);
for (int i = 0; i < n; i ++) {
if (t[i] % d != 0) {
printf("-1\n");
return 0;
}
t[i] /= d;
}
a /= d;
b /= d;
if (a > b) swap(a, b);
if (a == 1 && b == 1) {
long long ans = 0;
for (int i = 0; i < n; i ++) ans += abs(t[i]);
printf("%lld\n", ans / 2);
return 0;
}
int x0 = getPower(a, getPhi(b) - 1, b);
int y0 = (1 - (long long)x0 * a) / b;
for (int i = 0; i < n; i ++) {
x[i] = (long long)x0 * t[i];
y[i] = (long long)y0 * t[i];
long long head = -t[i], tail = t[i];
if (head > tail) swap(head, tail);
tail --;
while (head <= tail) {
long long mid = (head + tail) / 2;
long long t1 = abs(x[i] - mid * b) + abs(y[i] + mid * a);
long long t2 = abs(x[i] - (mid + 1) * b) + abs(y[i] + (mid + 1) * a);
if (t1 < t2) tail = mid - 1; else head = mid + 1;
}
x[i] -= (tail + 1) * b;
y[i] += (tail + 1) * a;
}
long long s = 0;
for (int i = 0; i < n; i ++) s += x[i];
s /= b;
if (s < 0) {
swap(a, b);
for (int i = 0; i < n; i ++) swap(x[i], y[i]);
s *= -1;
}
priority_queue< pair<long long, int> > Q;
for (int i = 0; i < n; i ++) {
long long tmp = abs(x[i] - b) + abs(y[i] + a) - abs(x[i]) - abs(y[i]);
Q.push(make_pair(-tmp, i));
}
for (int i = 0; i < s; i ++) {
int loc = Q.top().second;
Q.pop();
x[loc] -= b;
y[loc] += a;
long long tmp = abs(x[loc] - b) + abs(y[loc] + a) - abs(x[loc]) - abs(y[loc]);
Q.push(make_pair(-tmp, loc));
}
long long ans = 0;
for (int i = 0; i < n; i ++) ans += abs(x[i]) + abs(y[i]);
printf("%lld\n", ans / 2);
return 0;
}
CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8cXVldWU+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbG9uZyBsb25nIHhbMTAwMDAxXSwgeVsxMDAwMDFdOwppbnQgdFsxMDAwMDFdOwoKaW50IGdjZChpbnQgbSwgaW50IG4pIHsKCXdoaWxlIChuID4gMCkgewoJCWludCByID0gbSAlIG47CgkJbSA9IG47CgkJbiA9IHI7Cgl9CglyZXR1cm4gbTsKfQoKaW50IGdldFBoaShpbnQgbikgewoJaW50IHJlcyA9IDE7Cglmb3IgKGludCBpID0gMjsgaSAqIGkgPD0gbjsgaSArKykKCQlpZiAobiAlIGkgPT0gMCkgewoJCQlyZXMgKj0gaSAtIDE7CgkJCW4gLz0gaTsKCQkJd2hpbGUgKG4gJSBpID09IDApIHsKCQkJCXJlcyAqPSBpOwoJCQkJbiAvPSBpOwoJCQl9CgkJfQoJaWYgKG4gPiAxKSByZXMgKj0gbiAtIDE7CglyZXR1cm4gcmVzOwp9CgppbnQgZ2V0UG93ZXIoaW50IGEsIGludCBwLCBpbnQgbW9kdWxvKSB7CglpZiAocCA9PSAwKSByZXR1cm4gMTsKCWludCByZXMgPSBnZXRQb3dlcihhLCBwIC8gMiwgbW9kdWxvKTsKCXJlcyA9IChsb25nIGxvbmcpcmVzICogcmVzICUgbW9kdWxvOwoJaWYgKHAgJSAyID09IDEpIHJlcyA9IChsb25nIGxvbmcpcmVzICogYSAlIG1vZHVsbzsKCXJldHVybiByZXM7Cn0KCmludCBtYWluKCkgewoJaW50IG4sIGEsIGI7CglzY2FuZigiJWQlZCVkIiwgJm4sICZhLCAmYik7Cglmb3IgKGludCBpID0gMDsgaSA8IG47IGkgKyspIHNjYW5mKCIlZCIsICZ0W2ldKTsKCXRbbl0gPSAtdFtuLTFdOwoJZm9yIChpbnQgaSA9IG4gLSAxOyBpID49IDE7IGkgLS0pIHRbaV0gPSB0W2ldIC0gdFtpLTFdOwoJbiArKzsKCQoJaW50IGQgPSBnY2QoYSwgYik7Cglmb3IgKGludCBpID0gMDsgaSA8IG47IGkgKyspIHsKCQlpZiAodFtpXSAlIGQgIT0gMCkgewoJCQlwcmludGYoIi0xXG4iKTsKCQkJcmV0dXJuIDA7CgkJfQoJCXRbaV0gLz0gZDsKCX0KCWEgLz0gZDsKCWIgLz0gZDsKCQoJaWYgKGEgPiBiKSBzd2FwKGEsIGIpOwoJaWYgKGEgPT0gMSAmJiBiID09IDEpIHsKCQlsb25nIGxvbmcgYW5zID0gMDsKCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkgKyspIGFucyArPSBhYnModFtpXSk7CgkJcHJpbnRmKCIlbGxkXG4iLCBhbnMgLyAyKTsKCQlyZXR1cm4gMDsKCX0KCQoJaW50IHgwID0gZ2V0UG93ZXIoYSwgZ2V0UGhpKGIpIC0gMSwgYik7CglpbnQgeTAgPSAoMSAtIChsb25nIGxvbmcpeDAgKiBhKSAvIGI7CgkKCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSArKykgewoJCXhbaV0gPSAobG9uZyBsb25nKXgwICogdFtpXTsKCQl5W2ldID0gKGxvbmcgbG9uZyl5MCAqIHRbaV07CgkJbG9uZyBsb25nIGhlYWQgPSAtdFtpXSwgdGFpbCA9IHRbaV07CgkJaWYgKGhlYWQgPiB0YWlsKSBzd2FwKGhlYWQsIHRhaWwpOwoJCXRhaWwgLS07CgkJd2hpbGUgKGhlYWQgPD0gdGFpbCkgewoJCQlsb25nIGxvbmcgbWlkID0gKGhlYWQgKyB0YWlsKSAvIDI7CgkJCWxvbmcgbG9uZyB0MSA9IGFicyh4W2ldIC0gbWlkICogYikgKyBhYnMoeVtpXSArIG1pZCAqIGEpOwoJCQlsb25nIGxvbmcgdDIgPSBhYnMoeFtpXSAtIChtaWQgKyAxKSAqIGIpICsgYWJzKHlbaV0gKyAobWlkICsgMSkgKiBhKTsKCQkJaWYgKHQxIDwgdDIpIHRhaWwgPSBtaWQgLSAxOyBlbHNlIGhlYWQgPSBtaWQgKyAxOwoJCX0KCQl4W2ldIC09ICh0YWlsICsgMSkgKiBiOwoJCXlbaV0gKz0gKHRhaWwgKyAxKSAqIGE7Cgl9CgkKCWxvbmcgbG9uZyBzID0gMDsKCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSArKykgcyArPSB4W2ldOwoJcyAvPSBiOwoJaWYgKHMgPCAwKSB7CgkJc3dhcChhLCBiKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkgKyspIHN3YXAoeFtpXSwgeVtpXSk7CgkJcyAqPSAtMTsKCX0KCQoJcHJpb3JpdHlfcXVldWU8IHBhaXI8bG9uZyBsb25nLCBpbnQ+ID4gUTsKCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSArKykgewoJCWxvbmcgbG9uZyB0bXAgPSBhYnMoeFtpXSAtIGIpICsgYWJzKHlbaV0gKyBhKSAtIGFicyh4W2ldKSAtIGFicyh5W2ldKTsKCQlRLnB1c2gobWFrZV9wYWlyKC10bXAsIGkpKTsKCX0KCQoJZm9yIChpbnQgaSA9IDA7IGkgPCBzOyBpICsrKSB7CgkJaW50IGxvYyA9IFEudG9wKCkuc2Vjb25kOwoJCVEucG9wKCk7CgkJeFtsb2NdIC09IGI7CgkJeVtsb2NdICs9IGE7CgkJbG9uZyBsb25nIHRtcCA9IGFicyh4W2xvY10gLSBiKSArIGFicyh5W2xvY10gKyBhKSAtIGFicyh4W2xvY10pIC0gYWJzKHlbbG9jXSk7CgkJUS5wdXNoKG1ha2VfcGFpcigtdG1wLCBsb2MpKTsKCX0KCQoJbG9uZyBsb25nIGFucyA9IDA7Cglmb3IgKGludCBpID0gMDsgaSA8IG47IGkgKyspIGFucyArPSBhYnMoeFtpXSkgKyBhYnMoeVtpXSk7CglwcmludGYoIiVsbGRcbiIsIGFucyAvIDIpOwoJCglyZXR1cm4gMDsKfQo=