#include <bits/stdc++.h>
using namespace std;
const int INF = 1791791791;
const long long INFLL = 1791791791791791791ll;
template <int input_buf_size, int output_buf_size>
class FastIO {
  char cbuf[input_buf_size + 1];
  int icur = 0;
  inline bool go_to_next_token() {
    while (cbuf[icur] == ' ' || cbuf[icur] == '\n') icur++;
    while (cbuf[icur] == 0) {
      icur = 0;
      if (fgets(cbuf, sizeof(cbuf), stdin) != cbuf) return false;
      while (cbuf[icur] == ' ' || cbuf[icur] == '\n') icur++;
    }
    return true;
  }

 public:
  string readString() {
    assert(go_to_next_token());
    string ans;
    while (cbuf[icur] != ' ' && cbuf[icur] != '\n' && cbuf[icur] != 0)
      ans.push_back(cbuf[icur++]);
    ans.shrink_to_fit();
    return ans;
  }
  template <class int_type>
  int_type readInt() {
    assert(go_to_next_token());
    int_type x = 0;
    bool m = cbuf[icur] == '-';
    if (m) icur++;
    while ('0' <= cbuf[icur] && cbuf[icur] <= '9') {
      x *= 10;
      x += (cbuf[icur] - '0');
      icur++;
    }
    if (m) x = -x;
    return x;
  }
  bool seekEof() { return !go_to_next_token(); }

 private:
  char obuf[output_buf_size + 1];
  int ocur = 0;
  inline void write_string(const char *str, size_t sz = 0) {
    if (sz == 0) sz = strlen(str);
    if (ocur + sz > output_buf_size) {
      fputs(obuf, stdout);
      fputs(str, stdout);
      ocur = 0;
      obuf[0] = 0;
      return;
    }
    strcpy(obuf + ocur, str);
    ocur += sz;
    obuf[ocur] = 0;
  }

 public:
  template <class int_type>
  void writeInt(int_type x, bool sp = true) {
    char buf[20];
    int c = 0;
    if (x < 0) {
      buf[c++] = '-';
      x = -x;
    }
    int s = c;
    if (x == 0) {
      buf[c++] = '0';
    }
    while (x > 0) {
      buf[c++] = (x % 10) + '0';
      x /= 10;
    }
    for (int i = 0; 2 * i < c - s; i++) {
      swap(buf[s + i], buf[c - 1 - i]);
    }
    buf[c] = 0;
    write_string(buf, c);
    if (sp) write_string(" ", 1);
  }
  void writeString(string s, bool space = true) {
    write_string(s.c_str(), s.size());
    if (space) write_string(" ", 1);
  }
  void writeEndl() { write_string("\n", 1); }
  void flush() {
    fputs(obuf, stdout);
    ocur = 0;
    obuf[0] = 0;
  }

 private:
  bool lflush;

 public:
  FastIO(bool local_flush) {
    obuf[0] = 0;
    lflush = local_flush;
  }
  ~FastIO() { fputs(obuf, stdout); }
};
FastIO<10000000, 10000000> IO(true);
vector<int> factor(int x) {
  vector<int> ans;
  for (int i = 2; i * i <= x; i++) {
    if (x % i == 0) {
      ans.push_back(i);
      while (x % i == 0) x /= i;
    }
  }
  if (x) ans.push_back(x);
  return ans;
}
long long solve(long long x, long long ma, long long b, vector<int> a) {
  if (x == 1) return INFLL;
  int n = a.size();
  vector<long long> pref(n + 1, 0);
  for (int i = 0; i < ((int)(n)); ++i) {
    if (pref[i] == INFLL)
      pref[i + 1] = INFLL;
    else if (a[i] % x == 0)
      pref[i + 1] = pref[i];
    else if ((a[i] - 1) % x == 0 || (a[i] + 1) % x == 0)
      pref[i + 1] = pref[i] + b;
    else
      pref[i + 1] = INFLL;
  }
  vector<long long> suf(n + 1, 0);
  for (int i = n - 1; i >= 0; i--) {
    if (suf[i + 1] == INFLL)
      suf[i] = INFLL;
    else if (a[i] % x == 0)
      suf[i] = suf[i + 1];
    else if ((a[i] - 1) % x == 0 || (a[i] + 1) % x == 0)
      suf[i] = suf[i + 1] + b;
    else
      suf[i] = INFLL;
  }
  long long mn = INFLL;
  int lopt = 0;
  for (int r = 0; r < ((int)(n)); ++r) {
    while (lopt <= r &&
           pref[lopt] + (r - lopt + 1) * ma > pref[lopt + 1] + (r - lopt) * ma)
      lopt++;
    if (pref[lopt] + (r - lopt + 1) * ma > pref[r + 1]) lopt = r + 1;
    mn = min(mn, pref[lopt] + (r - lopt + 1) * ma + suf[r + 1]);
  }
  return mn;
}
int main() {
  int n = IO.readInt<int>();
  long long a = IO.readInt<long long>();
  long long b = IO.readInt<long long>();
  vector<int> vec(n);
  for (int i = 0; i < ((int)(n)); ++i) vec[i] = IO.readInt<int>();
  long long mn = INFLL;
  for (int fn : vector<int>({vec[0] - 1, vec[0], vec[0] + 1, vec.back() - 1,
                             vec.back(), vec.back() + 1}))
    for (int div : factor(fn)) mn = min(mn, solve(div, a, b, vec));
  IO.writeInt(mn);
  IO.writeEndl();
  return 0;
}
