#include <bits/stdc++.h>
using namespace std;
int n, m, x;
int g[320][320], f[320][320];
int p = 1e9 + 7;
int main() {
  cin >> n >> m >> x;
  if (n > m) {
    cout << 0;
    return 0;
  }
  f[0][n] = 1;
  for (int in = m; in >= 1; in--) {
    for (int open = 0; open <= n; open++) {
      for (int re = 0; re <= n; re++) {
        g[open][re] = 0;
        if (in != x && open > 0)
          g[open][re] = (g[open][re] + f[open - 1][re]) % p;
        if (in != x) g[open][re] = (g[open][re] + f[open][re]) % p;
        if (open < n && re < n)
          g[open][re] = (g[open][re] + f[open + 1][re + 1]) % p;
        if (open > 0 && re < n)
          g[open][re] = (g[open][re] + f[open][re + 1]) % p;
        if (open == 0 && re < n)
          g[open][re] = (g[open][re] + f[open][re + 1]) % p;
      }
    }
    for (int open = 0; open <= n; open++) {
      for (int re = 0; re <= n; re++) {
        swap(g[open][re], f[open][re]);
      }
    }
  }
  long long ans = f[0][0];
  for (int i = 1; i <= n; i++) {
    ans = (ans * i * 1LL) % p;
  }
  cout << ans << "\n";
}
