#include <bits/stdc++.h>
using namespace std;
const int n0 = 5e5 + 123, mod = 1e9 + 7;
int n, d[2][n0], l[n0], r[n0], pref[2][n0];
long long cur[2];
string s;
void del(int x) {
  l[r[x]] = l[x];
  r[l[x]] = r[x];
}
struct segment {
  int l = 0, r = 0, sz;
  bool add(int x) {
    if (!empty() || (x >= l && x <= r)) return 0;
    l = min(l, x);
    r = max(r, x);
    return 1;
  }
  int empty() { return sz - (r - l); }
} seg[2];
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0);
  cin >> n >> seg[0].sz >> seg[1].sz >> s;
  for (int i = 0; i < n; i++) r[i] = (i + 1) % n, l[i] = (i - 1 + n) % n;
  for (int i = 0; i < n; i++) {
    pref[0][i] = (i ? pref[0][i - 1] : 0) + (s[i] == 'D') - (s[i] == 'U');
    pref[1][i] = (i ? pref[1][i - 1] : 0) + (s[i] == 'R') - (s[i] == 'L');
  }
  int ans = 0, pos = 0;
  long long it = 1;
  cur[0] = pref[0][0], cur[1] = pref[1][0];
  while (1) {
    bool ok = 0;
    if (abs(cur[0]) <= seg[0].sz && abs(cur[1]) <= seg[1].sz) {
      for (int j = 0; j < 2; j++) {
        if (seg[j].add(cur[j])) {
          (ans += (it % mod) * seg[j ^ 1].empty() % mod) %= mod;
          ok = 1;
        }
      }
    }
    if (!ok) {
      if (r[pos] == pos) break;
      del(pos);
    }
    if (r[pos] <= pos) {
      it += n;
      for (int j = 0; j < 2; j++) cur[j] += pref[j][n - 1];
    }
    it += r[pos] - pos;
    for (int j = 0; j < 2; j++) cur[j] += pref[j][r[pos]] - pref[j][pos];
    pos = r[pos];
  }
  if (seg[0].empty() && seg[1].empty()) return cout << -1, 0;
  cout << ans;
}
