#include <bits/stdc++.h>
using namespace std;
const long long nn = 0;
int n, m, x, d[34000005], i;
long long has;
long long mo = 1e9 + 7;
long long depe(long long aa, long long bb, long long cc) {
  if (aa == (m + 1) && bb == 0 && cc == 0) return 1;
  if (aa == (m + 1) || bb < 0 || cc < 0) return 0;
  long long Z = aa + bb * (m + 1) + cc * (n + 1) * (m + 1);
  if (d[Z] != -1) return d[Z];
  long long ret = 0;
  if (x != aa) {
    ret = (ret + depe(aa + 1, bb, cc)) % mo;
    ret = (ret + depe(aa + 1, bb, cc - 1)) % mo;
  }
  ret = (ret + depe(aa + 1, bb - 1, cc + 1)) % mo;
  ret = (ret + depe(aa + 1, bb - 1, cc)) % mo;
  ret %= mo;
  return d[Z] = ret;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> x;
  memset(d, -1, sizeof(d));
  has = 1;
  for (i = 1; i <= n; i++) has = (has * i) % mo;
  has = (has * depe(1, n, 0)) % mo;
  cout << has << "\n";
}
