#include <bits/stdc++.h>
using namespace std;
const long long INF = 1ull << 60;
long long get1(string& str, long long x, long long y) {
  long long cnt1 = 0;
  bool prv1 = true;
  for (int i = 0; i < str.size(); ++i) {
    if (str[i] == '1' && prv1 == false) {
      cnt1++;
      prv1 = true;
    } else if (str[i] == '0') {
      prv1 = false;
    }
  }
  bool bZero = false;
  for (int i = 0; i < str.size(); ++i) {
    if (str[i] == '0') bZero = true;
  }
  long long ret = cnt1 * x;
  if (bZero) ret += y;
  return ret;
}
long long get2(string& str, long long x, long long y) {
  long long cnt0 = 0;
  bool prv0 = false;
  for (int i = 0; i < str.size(); ++i) {
    if (str[i] == '0' && prv0 == false) {
      cnt0++;
      prv0 = true;
    } else if (str[i] == '1') {
      prv0 = false;
    }
  }
  long long ret = cnt0 * y;
  return ret;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long inf = INF;
  int n;
  long long x, y;
  cin >> n >> x >> y;
  string str, str2, org;
  cin >> org;
  bool frontOne = false;
  for (int i = 0; i < org.size(); ++i) {
    if (org[i] == '1' && frontOne == false) {
      continue;
    } else {
      str.push_back(org[i]);
      frontOne = true;
    }
  }
  bool backOne = false;
  for (int i = str.size() - 1; i >= 0; --i) {
    if (str[i] == '1' && backOne == false) {
      continue;
    } else {
      str2.push_back(str[i]);
      backOne = true;
    }
  }
  string rev = str2;
  reverse(rev.begin(), rev.end());
  long long cand1 = get1(str, x, y);
  long long cand2 = get1(rev, x, y);
  long long cand3 = get2(rev, x, y);
  long long sol = min(cand1, min(cand2, cand3));
  cout << sol;
  return 0;
}
