#include <bits/stdc++.h>
using namespace std;
const bool debug = false;
const int lim = 20;
const int maxN = 500005;
long long inf = -1;
long long tinf = 1e18;
const int MOD = 1e9 + 7;
long long l[maxN], r[maxN], u[maxN], d[maxN];
long long sl[maxN], sr[maxN], su[maxN], sd[maxN];
int n, h, w;
pair<char, long long> closest(int x, int y) {
  long long ld = l[x + 1];
  if (ld == inf) ld = tinf;
  long long rd = r[w - x];
  if (rd == inf) rd = tinf;
  long long ud = u[h - y];
  if (ud == inf) ud = tinf;
  long long dd = d[y + 1];
  if (dd == inf) dd = tinf;
  long long md = min(min(ld, rd), min(ud, dd));
  if (md == tinf) md = inf;
  if (ld == md) return {'L', md};
  if (rd == md) return {'R', md};
  if (ud == md) return {'U', md};
  return {'D', md};
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout.precision(15);
  char c;
  cin >> n >> h >> w;
  int cx = 0, cy = 0;
  int pl = 0, pr = 0, pu = 0, pd = 0;
  for (int i = 1; i < maxN; i++) l[i] = r[i] = u[i] = d[i] = inf;
  for (int i = 1; i <= n; i++) {
    cin >> c;
    if (c == 'L') {
      cx--;
      if (-cx > pl) l[++pl] = i;
    }
    if (c == 'R') {
      cx++;
      if (+cx > pr) r[++pr] = i;
    }
    if (c == 'U') {
      cy++;
      if (+cy > pu) u[++pu] = i;
    }
    if (c == 'D') {
      cy--;
      if (-cy > pd) d[++pd] = i;
    }
  }
  if (debug) cout << "Total offset: (" << cx << ", " << cy << ")" << endl;
  while (cx < 0 && ++pl < maxN) l[pl] = l[pl + cx] + n;
  while (cx > 0 && ++pr < maxN) r[pr] = r[pr - cx] + n;
  while (cy > 0 && ++pu < maxN) u[pu] = u[pu - cy] + n;
  while (cy < 0 && ++pd < maxN) d[pd] = d[pd + cy] + n;
  for (int i = 1; i < maxN; i++) {
    sl[i] = l[i] == inf ? inf : l[i] + sl[i - 1];
    sr[i] = r[i] == inf ? inf : r[i] + sr[i - 1];
    su[i] = u[i] == inf ? inf : u[i] + su[i - 1];
    sd[i] = d[i] == inf ? inf : d[i] + sd[i - 1];
    sl[i] %= MOD;
    sr[i] %= MOD;
    su[i] %= MOD;
    sd[i] %= MOD;
  }
  if (debug) {
    cout << "Left:  ";
    for (int i = 0; i <= min(w, lim); i++) cout << l[i] << " ";
    cout << endl;
    cout << "Right: ";
    for (int i = 0; i <= min(w, lim); i++) cout << r[i] << " ";
    cout << endl;
    cout << "Up:    ";
    for (int i = 0; i <= min(h, lim); i++) cout << u[i] << " ";
    cout << endl;
    cout << "Down:  ";
    for (int i = 0; i <= min(h, lim); i++) cout << d[i] << " ";
    cout << endl;
  }
  if (debug) {
    cout << "SLeft:  ";
    for (int i = 0; i <= min(w, lim); i++) cout << sl[i] << " ";
    cout << endl;
    cout << "SRight: ";
    for (int i = 0; i <= min(w, lim); i++) cout << sr[i] << " ";
    cout << endl;
    cout << "SUp:    ";
    for (int i = 0; i <= min(h, lim); i++) cout << su[i] << " ";
    cout << endl;
    cout << "SDown:  ";
    for (int i = 0; i <= min(h, lim); i++) cout << sd[i] << " ";
    cout << endl;
  }
  if (debug)
    cout << "ASDF: " << sl[w] << " " << sr[w] << " " << su[h] << " " << sd[h]
         << endl;
  long long total = 0;
  cy = h - 1;
  if (debug) cout << "Up: ";
  for (int i = 0; i < w; i++) {
    while (cy >= 0 && closest(i, cy).first == 'U') cy--;
    while (cy <= h - 1 && closest(i, cy).first != 'U') cy++;
    if (debug && i < lim) cout << "(" << i << "," << cy << ") ";
    total = (total == inf || su[h - cy] == inf) ? inf : total + su[h - cy];
    total %= MOD;
  }
  if (debug) cout << endl;
  if (debug) cout << "After up: " << total << endl;
  cy = 0;
  if (debug) cout << "Dn: ";
  for (int i = 0; i < w; i++) {
    while (cy <= h - 1 && closest(i, cy).first == 'D') cy++;
    while (cy >= 0 && closest(i, cy).first != 'D') cy--;
    if (debug && i < lim) cout << "(" << i << "," << cy << ") ";
    total = (total == inf || sd[cy + 1] == inf) ? inf : total + sd[cy + 1];
    total %= MOD;
  }
  if (debug) cout << endl;
  if (debug) cout << "After Dn: " << total << endl;
  cx = 0;
  if (debug) cout << "Lt: ";
  for (int i = 0; i < h; i++) {
    while (cx <= w - 1 && closest(cx, i).first == 'L') cx++;
    while (cx >= 0 && closest(cx, i).first != 'L') cx--;
    if (debug && i < lim) cout << "(" << i << "," << cx << ") ";
    total = (total == inf || sl[cx + 1] == inf) ? inf : total + sl[cx + 1];
    total %= MOD;
  }
  if (debug) cout << endl;
  if (debug) cout << "After Lt: " << total << endl;
  cx = w - 1;
  if (debug) cout << "Rt: ";
  for (int i = 0; i < h; i++) {
    while (cx >= 0 && closest(cx, i).first == 'R') cx--;
    while (cx <= w - 1 && closest(cx, i).first != 'R') cx++;
    if (debug && i < lim) cout << "(" << i << "," << cx << ") ";
    total = (total == inf || sr[w - cx] == inf) ? inf : total + sr[w - cx];
    total %= MOD;
  }
  if (debug) cout << endl;
  cout << total << endl;
}
