#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
const double EPS = 1e-10;
const double PI = acos(-1);
const long long MOD = (long long)1e9 + 9;
struct mint {
  long long x;
  mint(long long x = 0) : x((x % MOD + MOD) % MOD) {}
  mint& operator+=(const mint a) {
    if ((x += a.x) >= MOD) x -= MOD;
    return *this;
  }
  mint& operator-=(const mint a) {
    if ((x += MOD - a.x) >= MOD) x -= MOD;
    return *this;
  }
  mint& operator*=(const mint a) {
    (x *= a.x) %= MOD;
    return *this;
  }
  mint operator+(const mint a) const {
    mint res(*this);
    return res += a;
  }
  mint operator-(const mint a) const {
    mint res(*this);
    return res -= a;
  }
  mint operator*(const mint a) const {
    mint res(*this);
    return res *= a;
  }
  mint pow(long long t) const {
    if (!t) return 1;
    mint a = pow(t >> 1);
    a *= a;
    if (t & 1) a *= *this;
    return a;
  }
  mint inv() const { return pow(MOD - 2); }
  mint& operator/=(const mint a) { return (*this) *= a.inv(); }
  mint operator/(const mint a) const {
    mint res(*this);
    return res /= a;
  }
  friend istream& operator>>(istream& in, mint& a) {
    long long _v;
    in >> _v;
    a = mint(_v);
    return in;
  }
  friend ostream& operator<<(ostream& out, const mint& a) { return out << a.x; }
  friend bool operator==(const mint& a, const mint& b) { return a.x == b.x; }
  friend bool operator!=(const mint& a, const mint& b) { return a.x != b.x; }
};
class CAlternatingSum {
 public:
  int N, K;
  mint A, B;
  vector<char> X;
  void input(std::istream& in, std::ostream& out) {
    ios_base::sync_with_stdio(false);
    in.tie(nullptr), out.tie(nullptr);
    in >> N >> A >> B >> K;
    X = vector<char>(K);
    for (int(i) = (0); (i) < (K); ++(i)) in >> X[i];
  }
  void solve(std::istream& in, std::ostream& out) {
    input(in, out);
    mint ans = 0;
    mint D = A.pow(MOD - K - 1) * B.pow(K);
    if (D == 1) {
      for (int(i) = (0); (i) < (K); ++(i)) {
        mint C = A.pow(N - i) * B.pow(i);
        if (X[i] == '+')
          ans += C * ((N - i) / K + 1);
        else
          ans -= C * ((N - i) / K + 1);
      }
      out << ans << '\n';
    } else {
      for (int(i) = (0); (i) < (K); ++(i)) {
        int m = (N - i) / K;
        mint C = A.pow(N - i) * B.pow(i);
        if (X[i] == '+')
          ans += C * (D.pow(m + 1) - 1) / (D - 1);
        else
          ans -= C * (D.pow(m + 1) - 1) / (D - 1);
      }
      out << ans << '\n';
    }
  }
};
int main() {
  CAlternatingSum solver;
  std::istream& in(std::cin);
  std::ostream& out(std::cout);
  solver.solve(in, out);
  return 0;
}
