#include <bits/stdc++.h>
using namespace std;
long long int modulo = 1e9 + 7;
const int limite = 1000000;
long long int sol = 0;
long long int n, h, w;
string s;
int despx, despy;
long long int maxx, maxy, minx, miny;
int tr[limite], tl[limite], tu[limite], td[limite];
void calcula(bool todo) {
  maxx = maxy = minx = miny = 0;
  int x = 0, y = 0;
  for (long long int i = 0; i < int(s.size()); i++) {
    char c = s[i];
    if (c == 'U') {
      y++;
      if (y > maxy) {
        maxy = y;
        if (todo) {
          tu[y] = i + 1;
          if (maxy - miny <= h)
            sol = (sol + (i + 1) * max(0LL, w - (maxx - minx))) % modulo;
        }
      }
    } else if (c == 'D') {
      y--;
      if (y < miny) {
        miny = y;
        if (todo) {
          if (maxy - miny <= h)
            sol = (sol + (i + 1) * max(0LL, w - (maxx - minx))) % modulo;
        }
      }
    } else if (c == 'R') {
      x++;
      if (x > maxx) {
        maxx = x;
        if (todo) {
          tr[x] = i + 1;
          if (maxx - minx <= w)
            sol = (sol + (i + 1) * max(0LL, h - (maxy - miny))) % modulo;
        }
      }
    } else if (c == 'L') {
      x--;
      if (x < minx) {
        minx = x;
        if (todo) {
          if (maxx - minx <= w)
            sol = (sol + (i + 1) * max(0LL, h - (maxy - miny))) % modulo;
        }
      }
    }
  }
  despx = x;
  despy = y;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> h >> w >> s;
  calcula(false);
  if (despx < 0) {
    for (int i = 0; i < int(s.size()); i++)
      if (s[i] == 'L')
        s[i] = 'R';
      else if (s[i] == 'R')
        s[i] = 'L';
  }
  if (despy < 0) {
    for (int i = 0; i < int(s.size()); i++)
      if (s[i] == 'U')
        s[i] = 'D';
      else if (s[i] == 'D')
        s[i] = 'U';
  }
  calcula(true);
  if (maxx - minx < w and maxy - miny < h) {
    if (despx == 0 and despy == 0) {
      cout << -1 << endl;
      exit(0);
    }
    int ww = w - (maxx - minx);
    int hh = h - (maxy - miny);
    w += minx;
    h += miny;
    int posx = ww + despx;
    int posy = hh + despy;
    while (ww < posx or hh < posy) {
      int dx = w - posx + 1;
      int dy = h - posy + 1;
      if (tr[dx] and (tu[dy] == 0 or tr[dx] < tu[dy])) {
        for (int x = posx - despx, y = posy - despy, prod = 1; x > 0 and y > 0;
             x -= despx, y -= despy, prod++)
          sol = (sol + y * (prod * n % modulo + tr[dx])) % modulo;
        posx--;
      } else {
        for (int x = posx - despx, y = posy - despy, prod = 1; x > 0 and y > 0;
             x -= despx, y -= despy, prod++)
          sol = (sol + x * (prod * n % modulo + tu[dy])) % modulo;
        posy--;
      }
    }
  }
  cout << sol << endl;
}
