#include <bits/stdc++.h>
using namespace std;
const int mod = 1000 * 1000 * 1000 + 7;
const int maxn = 320;
const int maxm = 100000;
int n, m, x;
int prv[maxn][maxn];
int nxt[maxn][maxn];
inline void addto(int &x, int y) {
  x += y;
  if (x >= mod) x -= mod;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m >> x;
  if (n > m) {
    cout << 0 << endl;
    return 0;
  }
  x--;
  prv[0][0] = 1;
  for (int z = 0, _n = (int)(m); z < _n; z++) {
    for (int i = 0, _n = (int)(n + 1); i < _n; i++)
      for (int j = 0, _n = (int)(i + 1); j < _n; j++) {
        nxt[i][j] = 0;
        if (z != x) addto(nxt[i][j], prv[i][j]);
        if (i && j) addto(nxt[i][j], prv[i - 1][j - 1]);
        if (z != x) addto(nxt[i][j], prv[i][j + 1]);
        if (i) addto(nxt[i][j], prv[i - 1][j]);
      }
    for (int i = 0, _n = (int)(n + 1); i < _n; i++)
      for (int j = 0, _n = (int)(i + 1); j < _n; j++) prv[i][j] = nxt[i][j];
  }
  long long f = 1;
  for (int i = (int)(1), _n = (int)(n + 1); i < _n; i++) f = f * i % mod;
  cout << nxt[n][0] * f % mod << endl;
  {
    int _;
    cin >> _;
    return 0;
  }
}
