uses math;
var
a,b,c,d,last,last1,i,j,k,k1,ans:longint;
v:array[0..50000,1..2]of longint;
r,r1:array[1..50000]of longint;
f:array[0..50000,1..1000]of longint;
procedure ss(l,r:longint);
var
i,j,mid:longint;
begin
i:=l;
j:=r;
mid:=v[(i+j) div 2,1];
while i<j do
begin
while v[i,1]<mid do inc(i);
while v[j,1]>mid do dec(j);
if i<=j then
begin
v[0]:=v[i];
v[i]:=v[j];
v[j]:=v[0];
inc(i);
dec(j);
end;
end;
if j>l then ss(l,j);
if i<r then ss(i,r);
end;
begin
assign(input,'enemy.in');reset(input);
assign(output,'enemy.out');rewrite(output);
readln(a,b,c);
if (a=2)or(a=1) then
begin
writeln(0);
halt;
end;
for d:=1 to a do
begin
read(v[d,1]);
v[d,2]:=d;
end;
ss(1,a);
for d:=1 to a do
begin
if v[d,1]<>last then
begin
inc(last1);
last:=v[d,1];
end;
r[v[d,2]]:=last1;
end;
fillchar(f,sizeof(f),0);
for i:=1 to a do
begin
k:=maxlongint;
for j:=1 to last1 do
begin
k:=min(k,f[i-1,j]);
if r[i]>j then f[i,j]:=k+c;
if r[i]<j then f[i,j]:=k+b;
if r[i]=j then f[i,j]:=k;
end;
end;
ans:=maxlongint;
for i:=1 to last1 do ans:=min(ans,f[a,i]);
for i:=1 to a do r1[i]:=r[a-i+1];
fillchar(f,sizeof(f),0);
for i:=1 to a do
begin
k:=maxlongint;
for j:=1 to last1 do
begin
k:=min(k,f[i-1,j]);
if r1[i]>j then f[i,j]:=k+c;
if r1[i]<j then f[i,j]:=k+b;
if r1[i]=j then f[i,j]:=k;
end;
end;
for i:=1 to last1 do ans:=min(ans,f[a,i]);
writeln(ans);
close(input);
close(output);
end.