#include <bits/stdc++.h>
using namespace std;
char CRTBUFF[30000];
struct debugger {
  template <typename T>
  debugger &operator,(const T &v) {
    cerr << v << " ";
    return *this;
  }
} dbg;
const double EPS = 1e-9;
const int INF = 0x3f3f3f3f;
const double PI = 2.0 * acos(0.0);
long long MIN() { return INF; }
template <typename T, typename... Args>
inline T MIN(T a, Args... args) {
  return min(a, (T)MIN(args...));
}
long long MAX() { return -INF; }
template <typename T, typename... Args>
inline T MAX(T a, Args... args) {
  return max(a, (T)MAX(args...));
}
long long n, a, b;
string st;
long long dp[200004][4];
long long call(int in, int level) {
  if (in >= n) return (level == 0 ? b : (long long)INT_MAX);
  long long &ret = dp[in][level];
  if (ret != -1) return ret;
  ret = LLONG_MAX;
  long long pillar = (level == 0 ? b : b + b);
  if (level == 0 && st[in + 1] == '0') {
    ret = min(ret, a + pillar + call(in + 1, 0));
    ret = min(ret, a + a + pillar + call(in + 1, 1));
  } else if (level == 0 && st[in + 1] == '1') {
    ret = min(ret, a + a + pillar + call(in + 1, 1));
  } else if (level == 1 && st[in + 1] == '0') {
    if (st[in] == '0') ret = min(ret, a + a + pillar + call(in + 1, 0));
    ret = min(ret, a + pillar + call(in + 1, 1));
  } else if (level == 1 && st[in + 1] == '1') {
    ret = min(ret, a + pillar + call(in + 1, 1));
  }
  return ret;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int t;
  cin >> t;
  for (int ci = (int)(1); ci <= (int)(t); ci++) {
    cin >> n >> a >> b;
    cin >> st;
    st += '0';
    memset(dp, -1, sizeof(dp));
    cout << call(0, 0) << endl;
  }
  return 0;
}
