void solve(){
ll n, x, y;
string a, b, c;
cin >> n >> x >> y >> a >> b >> c;
vector<ll> aunmatch1pos, aunmatch0pos;
vector<ll> bunmatch1pos, bunmatch0pos;
ll unmatched = 0, matched = 0;
for(ll i = 0; i < n; i++){
if( ((a[i]-'0')^(b[i]-'0')) == (c[i]-'0') ){
matched ++;
}
else{
if(a[i] == '1')
aunmatch1pos.push_back(i);
else
aunmatch0pos.push_back(i);
if(b[i] == '1')
bunmatch1pos.push_back(i);
else
bunmatch0pos.push_back(i);
unmatched ++;
}
}
// a和b可能会是 00 01 10 11
// 但a和b异或只会有两种结果
// 即 0 或 1
// 00和11的结果相同, 10和01也相同
// 如果答案不匹配,修改任意一个(a或b)都可以得到正确答案
ll ans1 = unmatched * x;// 只反置的方案
// 交换的话,需要i和j位上都不匹配并且a[i]!=a[j]
ll mi = min(aunmatch1pos.size(),aunmatch0pos.size());
ll mx = max(aunmatch1pos.size(),aunmatch0pos.size());
ll ans2 = mi*y + (mx-mi)*x;// 交换a,剩下的反制
mi = min(bunmatch1pos.size(),bunmatch0pos.size());
mx = max(bunmatch1pos.size(),bunmatch0pos.size());
ll ans3 = mi*y + (mx-mi)*x;// 交换b,剩下的反制
cout << min({ans1, ans2, ans3}) << endl;
}