#include <bits/stdc++.h>
using namespace std;
long long int powa[100010], powb[100010], inva[100010];
pair<long long int, pair<long long int, long long int> > extendedEuclid(
    long long int a, long long int b) {
  long long int x = 1, y = 0;
  long long int xLast = 0, yLast = 1;
  long long int q, r, m, n;
  while (a != 0) {
    q = b / a;
    r = b % a;
    m = xLast - q * x;
    n = yLast - q * y;
    xLast = x, yLast = y;
    x = m, y = n;
    b = a, a = r;
  }
  return make_pair(b, make_pair(xLast, yLast));
}
long long int modInverse(long long int a, long long int m) {
  return (extendedEuclid(a, m).second.first + m) % m;
}
long long int fp(long long int a, long long int n) {
  if (n == 0) return 1;
  if (n == 1) return a;
  long long int half = fp(a, n / 2);
  if (n % 2 == 0)
    return (half * half) % 1000000009;
  else
    return (a * ((half * half) % 1000000009)) % 1000000009;
}
int main() {
  long long int n, a, b, k;
  long long int i, j;
  cin >> n >> a >> b >> k;
  string str;
  cin >> str;
  powa[0] = powb[0] = 1;
  long long int ainv = modInverse(a, 1000000009);
  inva[1] = ainv;
  for (i = 1; i <= k; i++) {
    powa[i] = (powa[i - 1] * a) % 1000000009;
    powb[i] = (powb[i - 1] * b) % 1000000009;
    if (i > 1) {
      inva[i] = (inva[i - 1] * ainv) % 1000000009;
    }
  }
  long long int X = 0;
  for (i = 0; i < k; i++) {
    long long int temp = (fp(a, n - i) * powb[i]) % 1000000009;
    if (str[i] == '+')
      X = (X + temp) % 1000000009;
    else
      X = (X - temp + 1000000009) % 1000000009;
  }
  long long int temp = (powb[k] * inva[k]) % 1000000009;
  if (temp != 1) {
    X = (X * modInverse(fp(a, n + 1 - k), 1000000009)) % 1000000009;
    long long int num = (fp(b, n + 1) - fp(a, n + 1) + 1000000009) % 1000000009;
    long long int den = (powb[k] - powa[k] + 1000000009) % 1000000009;
    long long int Y = (num * modInverse(den, 1000000009)) % 1000000009;
    X = (X * Y) % 1000000009;
  } else {
    long long int times = (n + 1) / k;
    X = (X * times) % 1000000009;
  }
  cout << X << endl;
  return 0;
}
