#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
long long cas[1007];
int n, x, pos;
void init() {
  cas[0] = cas[1] = 1;
  for (long long i = 2; i <= 1000; i++) cas[i] = cas[i - 1] * i % mod;
}
long long qpow(long long x, long long p) {
  long long ret = 1;
  while (p) {
    if (p & 1) ret = ret * x % mod;
    x = x * x % mod;
    p >>= 1;
  }
  return ret;
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  init();
  cin >> n >> x >> pos;
  int high = 0, low = 0;
  int l = 0, r = n;
  while (l < r) {
    int mid = (l + r) >> 1;
    if (mid <= pos) {
      l = mid + 1;
      if (mid != pos) low++;
    } else {
      r = mid;
      high++;
    }
  }
  if (low >= x || x + high > n)
    cout << 0 << endl;
  else {
    long long ans =
        cas[x - 1] * qpow(cas[low] * cas[x - 1 - low] % mod, mod - 2) % mod;
    ans = cas[n - x] * qpow(cas[high] * cas[n - x - high] % mod, mod - 2) %
          mod * ans % mod;
    ans =
        ans * cas[low] % mod * cas[high] % mod * cas[n - high - low - 1] % mod;
    cout << ans << endl;
  }
}
