#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-10;
const int inf = 1000000000;
const int N = 500005;
const int mo = 1000000000 + 7;
long long first, second, minx[N], miny[N], maxx[N], maxy[N], f[N], g[N];
int n, m, q;
long long fix(long long first) {
  first %= mo;
  while (first < 0) first += mo;
  return first;
}
bool checkx(int i, int j) { return 1 <= i + minx[j] && i + maxx[j] <= n; }
bool checky(int i, int j) { return 1 <= i + miny[j] && i + maxy[j] <= m; }
long long dpx(int i) {
  if (f[i] != -1) return f[i];
  if (checkx(i, q)) {
    if (first == 0) return f[i] = -1LL * inf * inf;
    return f[i] = dpx(i + first) + q;
  }
  int l = 1, r = q;
  while (l < r) {
    int mid = (l + r) / 2;
    if (checkx(i, mid))
      l = mid + 1;
    else
      r = mid;
  }
  return f[i] = l;
}
long long dpy(int i) {
  if (g[i] != -1) return g[i];
  if (checky(i, q)) {
    if (second == 0) return g[i] = -1LL * inf * inf;
    return g[i] = dpy(i + second) + q;
  }
  int l = 1, r = q;
  while (l < r) {
    int mid = (l + r) / 2;
    if (checky(i, mid))
      l = mid + 1;
    else
      r = mid;
  }
  return g[i] = l;
}
void work() {
  cin >> q >> n >> m;
  first = 0, second = 0;
  minx[0] = miny[0] = maxx[0] = maxy[0] = 0;
  for (int i = 1; i <= q; ++i) {
    char c;
    cin >> c;
    if (c == 'U') --first;
    if (c == 'D') ++first;
    if (c == 'L') --second;
    if (c == 'R') ++second;
    minx[i] = min(minx[i - 1], first);
    miny[i] = min(miny[i - 1], second);
    maxx[i] = max(maxx[i - 1], first);
    maxy[i] = max(maxy[i - 1], second);
  }
  for (int i = 1; i <= max(n, m); ++i) f[i] = g[i] = -1;
  vector<pair<long long, int> > a;
  for (int i = 1; i <= n; ++i) {
    if (dpx(i) < 0) continue;
    a.push_back(make_pair(dpx(i), 0));
  }
  for (int i = 1; i <= m; ++i) {
    if (dpy(i) < 0) continue;
    a.push_back(make_pair(dpy(i), 1));
  }
  sort(a.begin(), a.end());
  long long ans = 0;
  for (int i = 0; i < ((int)((a).size())); ++i) {
    if (a[i].second == 0)
      ans = fix(ans + a[i].first * m), --n;
    else
      ans = fix(ans + a[i].first * n), --m;
  }
  if (n > 0 && m > 0)
    cout << -1 << endl;
  else
    cout << ans << endl;
}
int main() {
  srand(time(0));
  ios_base::sync_with_stdio(false);
  work();
  return 0;
}
