#include <bits/stdc++.h>
using namespace std;
const long double pi = 3.1415926535897932384626433832795l;
template <typename T>
inline auto sqr(T x) -> decltype(x * x) {
  return x * x;
}
template <typename T1, typename T2>
inline bool umx(T1& a, T2 b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <typename T1, typename T2>
inline bool umn(T1& a, T2 b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
const long long mod = 1000000009;
long long get_st(long long a, int st) {
  long long res = 1;
  while (st) {
    if (st & 1) {
      (res *= a) %= mod;
    }
    (a *= a) %= mod;
    st >>= 1;
  }
  return res;
}
int main() {
  cout.setf(ios::showpoint | ios::fixed);
  cout.precision(20);
  long long n, a, b, k;
  cin >> n >> a >> b >> k;
  string s;
  getline(cin, s);
  getline(cin, s);
  long long res = 0;
  for (int i = int(0); i < int(k); ++i) {
    if (s[i] == '+') {
      (res += get_st(a, n - i) % mod * get_st(b, i)) %= mod;
    } else {
      (res += mod - get_st(a, n - i) % mod * get_st(b, i) % mod) %= mod;
    }
  };
  long long mult = get_st(get_st(a, mod - 2), k) * get_st(b, k) % mod;
  ;
  if (mult == 1 || (n + 1 == k)) {
    cout << (res * (n + 1) / k) % mod << endl;
  } else {
    cout << res * (get_st(mult, (n + 1) / k) - 1 + mod) % mod *
                get_st((mult - 1 + mod) % mod, mod - 2) % mod
         << endl;
  }
  return 0;
}
