#include <bits/stdc++.h>
using namespace std;
long long read() {
  char c = getchar();
  long long flag = 1, x = 0;
  while (!isdigit(c)) {
    if (c == '-') flag = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = x * 10 + (c - '0');
    c = getchar();
  }
  return flag * x;
}
long long n, a, b;
struct Node_Type {
  long long loc, dp;
} dot[200002 + 10];
long long tot = 0;
void deal() {
  n = read();
  a = read();
  b = read();
  tot = 0;
  for (long long i = 1; i <= n; i++) {
    char c = getchar();
    if (c == '1') {
      dot[++tot].loc = i;
      dot[tot].dp = 0;
    }
  }
  if (tot == 0) {
    cout << n * a + (n + 1) * b << endl;
    return;
  }
  dot[1].dp = (dot[1].loc + 1 + 2) * b + (dot[1].loc + 2) * a;
  for (long long i = 2; i <= tot; i++) {
    if (dot[i - 1].loc == dot[i].loc - 1) {
      dot[i].dp = dot[i - 1].dp + 2 * b + 1 * a;
    } else {
      long long Ans1 = dot[i - 1].dp +
                       (dot[i].loc - dot[i - 1].loc - 2 + 2) * 2 * b +
                       (dot[i].loc - dot[i - 1].loc) * a;
      long long Ans2 = dot[i - 1].dp +
                       (dot[i].loc - dot[i - 1].loc - 2 + 4) * b +
                       (dot[i].loc - dot[i - 1].loc + 2) * a;
      dot[i].dp = min(Ans1, Ans2);
    }
  }
  long long Ans = dot[tot].dp + (n - dot[tot].loc) * (a + b);
  if (dot[tot].loc == n) Ans = dot[tot].dp - a;
  cout << Ans << endl;
}
signed main() {
  long long T = read();
  for (long long i = 1; i <= T; i++) deal();
  return 0;
}
