#include <bits/stdc++.h>
using namespace std;
unsigned long long inf = numeric_limits<unsigned long long>::max();
int main() {
  int T;
  scanf("%d", &T);
  int N[T], A[T], B[T];
  string S[T];
  for (int i = 0; i < T; i++) {
    scanf("%d %d %d", N + i, A + i, B + i);
    cin >> S[i];
  }
  for (int k = 0; k < T; k++) {
    int n = N[k], a = A[k], b = B[k];
    bitset<200001> bset(S[k]);
    unsigned long long dp[n][4];
    int z = a << 1;
    dp[0][0] = a + (b << 1);
    dp[0][1] = inf;
    dp[0][2] = (a << 1) + 3 * b;
    dp[0][3] = inf;
    for (int i = 1; i < n; i++) {
      if (bset[i]) {
        dp[i][1] =
            (dp[i - 1][2] == inf
                 ? dp[i - 1][1]
                 : (dp[i - 1][1] == inf ? dp[i - 1][2]
                                        : min(dp[i - 1][1], dp[i - 1][2]))) +
            a + (b << 1);
        dp[i][0] = inf;
        dp[i][2] = inf;
        dp[i][3] = inf;
      } else {
        dp[i][0] = (dp[i - 1][0] == inf && dp[i - 1][3] == inf)
                       ? inf
                       : min(dp[i - 1][3], dp[i - 1][0]) + a + b;
        dp[i][1] = min(dp[i - 1][1], dp[i - 1][2]) + a + (b << 1);
        dp[i][2] = (dp[i - 1][0] == inf && dp[i - 1][3] == inf)
                       ? inf
                       : min(dp[i - 1][0], dp[i - 1][3]) + (a << 1) + (b << 1);
        dp[i][3] = min(dp[i - 1][1], dp[i - 1][2]) + (a << 1) + b;
      }
    }
    cout << min(dp[n - 1][0], dp[n - 1][3]) << endl;
  }
  return 0;
}
