#include <bits/stdc++.h>
using namespace std;
long long N, M, X;
vector<vector<long long> > cdp, ndp;
int main() {
  cin >> N >> M >> X;
  if (N > 2 * M)
    puts("0");
  else {
    cdp.resize(N + 1, vector<long long>(N + 1, 0));
    ndp.resize(N + 2, vector<long long>(N + 1, 0));
    cdp[0][N] = 1;
    for (int pos = 1; pos <= M; ++pos) {
      for (int i = 0; i <= N; ++i) fill(ndp[i].begin(), ndp[i].end(), 0);
      for (int pbal = 0; pbal <= N; ++pbal)
        for (int pleft = 0; pleft <= N; ++pleft) {
          if (cdp[pbal][pleft] == 0) continue;
          if (pos != X) ndp[pbal][pleft] += cdp[pbal][pleft];
          if (pbal + 1 <= N && pleft - 1 >= 0)
            ndp[pbal + 1][pleft - 1] += cdp[pbal][pleft];
          if (pos != X && pbal > 0) ndp[pbal - 1][pleft] += cdp[pbal][pleft];
          if (pbal >= 0 && pleft > 0) ndp[pbal][pleft - 1] += cdp[pbal][pleft];
        }
      for (int i = 0; i <= N; ++i)
        for (int j = 0; j < ((int)(ndp[i]).size()); ++j)
          ndp[i][j] %= 1000000007LL;
      cdp.swap(ndp);
    }
    long long ans = cdp[0][0];
    for (int i = 2; i <= N; ++i) ans = (ans * i) % 1000000007LL;
    cout << ans << '\n';
  }
  return 0;
}
