#include <bits/stdc++.h>
using namespace std;
long long MOD = 1e9 + 7;
long long ncr[1001][1001];
long long fac[1002];
void precompute() {
  ncr[1][1] = 1;
  ncr[1][0] = 1;
  fac[0] = 1;
  for (int i = 0; i < 1001; i++) {
    ncr[i][0] = 1;
    fac[i + 1] = (fac[i] * (i + 1)) % MOD;
    for (int j = 1; j <= i; j++) {
      ncr[i][j] = (ncr[i - 1][j] + ncr[i - 1][j - 1]) % MOD;
    }
  }
}
int main() {
  precompute();
  int n, x, p;
  scanf(" %d %d %d", &n, &x, &p);
  int st = -1, gt = 0;
  int l = 0, r = n, middle = 0;
  while (l < r) {
    middle = (l + r) / 2;
    if (middle <= p) {
      st++;
      l = middle + 1;
    } else {
      gt++;
      r = middle;
    }
  }
  long long ans = (fac[n - st - gt - 1] * ncr[n - x][gt]) % MOD;
  ans *= ncr[x - 1][st];
  ans %= MOD;
  ans *= (fac[gt] * fac[st]) % MOD;
  ans %= MOD;
  printf("%lld\n", ans);
  return 0;
}
