#include <bits/stdc++.h>
const int Len = 2333333;
using namespace std;
char buf[Len], *p1 = buf, *p2 = buf, duf[Len], *q1 = duf;
inline char gc();
inline int rd();
inline int pc(char c);
inline void rt(int x);
inline void flush();
int n;
long long ans = 1e18, tt, x, y, sum;
char c[300005];
int main() {
  scanf("%d%I64d%I64d", &n, &x, &y), scanf("%s", c + 1), c[n + 1] = '1';
  for (register int i = 1; i <= n + 1; ++i)
    if (c[i] == '1' && c[i - 1] == '0') ++sum;
  if (sum == 0) return printf("0"), 0;
  for (long long i = 0; i < sum; ++i) {
    tt = i * x + (sum - i) * y;
    if (tt < ans) ans = tt;
  }
  printf("%I64d", ans);
  return flush(), 0;
}
inline char gc() {
  return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, Len, stdin), p1 == p2)
             ? -1
             : *p1++;
}
inline int rd() {
  char c;
  while (!isdigit(c = gc()))
    ;
  int x = c ^ 48;
  while (isdigit(c = gc())) x = (x << 3) + (x << 1) + (c ^ 48);
  return x;
}
inline int pc(char c) {
  q1 == duf + Len &&fwrite(q1 = duf, 1, Len, stdout), *q1++ = c;
}
inline void rt(int x) { pc((x >= 10 ? rt(x / 10), x % 10 : x) + 48); }
inline void flush() { fwrite(duf, 1, q1 - duf, stdout); }
