#include <bits/stdc++.h>
using namespace std;
long long int pow(long long int A, long long int B) {
  if (!B) {
    return 1;
  } else if (B % 2) {
    return (A * ((pow(A, B / 2) * pow(A, B / 2)) % 1000000009)) % 1000000009;
  } else {
    return (pow(A, B / 2) * pow(A, B / 2)) % 1000000009;
  }
  return 0;
}
int main() {
  long long int N, A, B, K, i, j, len, prod, cyc, ma, mb, denom, num, v1, v2,
      ct, sum;
  char s[100005];
  scanf("%I64d %I64d %I64d %I64d", &N, &A, &B, &K);
  scanf(" %s", s);
  len = strlen(s);
  cyc = N / K;
  ct = 0;
  v1 = v2 = 0;
  if (cyc) {
    for (i = 0; i < K; i++) {
      prod = ((pow(A, N - i) % 1000000009) * (pow(B, i) % 1000000009)) %
             1000000009;
      ma = pow(A, K);
      mb = pow(B, K);
      denom = (mb * pow(ma, (long long int)1000000007)) % 1000000009;
      num = pow(denom, cyc);
      sum = 0;
      if (denom == 1) {
        sum = (cyc * prod) % 1000000009;
      } else {
        denom = (denom - 1 + 1000000009) % 1000000009;
        num = (num - 1 + 1000000009) % 1000000009;
        v1 = (num * pow(denom, (long long int)1000000007)) % 1000000009;
        sum = (prod * v1) % 1000000009;
      }
      if (s[i] == '-') {
        v2 -= sum;
        v2 += 1000000009;
        v2 %= 1000000009;
      } else {
        v2 += sum;
        v2 %= 1000000009;
      }
      if (v2 < 0) {
        v2 += 1000000009;
      }
    }
  }
  i = 0;
  j = (N / K) * K;
  for (; j <= N; j++) {
    sum = (pow(A, N - j) * pow(B, j)) % 1000000009;
    if (s[i] == '-') {
      v2 -= sum;
      v2 += 1000000009;
      v2 %= 1000000009;
    } else {
      v2 += sum;
      v2 %= 1000000009;
    }
    if (v2 < 0) {
      v2 += 1000000009;
    }
    i++;
  }
  printf("%I64d", v2 % 1000000009);
  return 0;
}
