#include <bits/stdc++.h>
using namespace std;
char s[100010];
long long pow0(long long x, long long k) {
  long long res = 1;
  while (k) {
    if (k & 1) res *= x;
    x *= x;
    k >>= 1;
    x %= 1000000009;
    res %= 1000000009;
  }
  return res;
}
long long inv(long long a, long long m) {
  return a == 1 ? 1 : inv(m % a, m) * (m - m / a) % m;
}
int main() {
  int n, a, b, k;
  scanf("%d%d%d%d", &n, &a, &b, &k);
  scanf("%s", s);
  long long res1 = 0;
  for (int i = 0; i <= n && i < k; i++) {
    if (s[i] == '+')
      res1 += pow0(a, n - i) * pow0(b, i) % 1000000009;
    else
      res1 -= pow0(a, n - i) * pow0(b, i) % 1000000009;
    res1 %= 1000000009;
  }
  if (n < k) {
    if (res1 < 0) res1 += 1000000009;
    printf("%lld\n", res1);
  } else {
    int m = (n + 1) / k;
    long long Sm = (res1 * pow0(a, k) % 1000000009) *
                   (pow0(a, k * m) - pow0(b, k * m) % 1000000009) % 1000000009;
    long long z = (pow0(a, k) - pow0(b, k)) % 1000000009;
    long long x = pow0(a, k * m) * z % 1000000009;
    long long res;
    if (x) {
      long long fenmu = inv(x, 1000000009);
      res = Sm * fenmu % 1000000009;
    } else {
      res = res1 * m % 1000000009;
    }
    for (int i = 0; i < (n + 1) % k; i++) {
      if (s[i] == '+')
        res += (pow0(a, m * k + i) * pow0(b, n - m * k - i)) % 1000000009;
      else
        res -= (pow0(a, m * k + i) * pow0(b, n - m * k - i)) % 1000000009;
      res %= 1000000009;
    }
    if (res < 0) res += 1000000009;
    printf("%lld\n", res);
  }
  return 0;
}
