#include <bits/stdc++.h>
using namespace std;
long long int fastPow(long long int a, long long int b) {
  long long int result = 1LL;
  while (b) {
    if ((b & 1LL)) {
      result *= a;
      result %= 1000000009;
    }
    b >>= 1;
    a *= a;
    a %= 1000000009;
  }
  return result;
}
long long int getInverse(long long int a) {
  return fastPow(a, 1000000009 - 2LL);
}
long long int calcA(string& s, long long int a, long long int b,
                    long long int n) {
  int i = n;
  int j = 0;
  long long int ans = 0;
  for (int t = 0; t < (int)s.size(); t++) {
    long long int term =
        fastPow(a, (long long int)i) * fastPow(b, (long long int)j);
    term %= 1000000009;
    if (s[t] == '-') {
      ans -= term;
      ans += 1000000009;
    } else {
      ans += term;
    }
    ans %= 1000000009;
    i--;
    j++;
  }
  return ans;
}
int main() {
  long long int n, a, b, k;
  cin >> n >> a >> b >> k;
  string s;
  cin >> s;
  bool special = false;
  long long int ans = 0LL;
  long long int A = calcA(s, a, b, n);
  if (fastPow(b, k) == fastPow(a, k)) {
    ans = A *= ((n + 1) / k);
    ans %= 1000000009;
    special = true;
  }
  if (n + 1LL == k) {
    ans = A;
    special = true;
  }
  if (!special) {
    ans = A;
    ans *= fastPow(a, k);
    ans %= 1000000009;
    ans *= ((fastPow(b, n + 1) - fastPow(a, n + 1) + 1000000009) % 1000000009);
    ans %= 1000000009;
    ans *= getInverse(fastPow(a, n + 1));
    ans %= 1000000009;
    ans *=
        getInverse((fastPow(b, k) - fastPow(a, k) + 1000000009) % 1000000009);
    ans %= 1000000009;
  }
  cout << ans << endl;
  return 0;
}
