#include <bits/stdc++.h>
using namespace std;
long long BE(long long x, long long n, long long m) {
  long long result = 1;
  while (n > 0) {
    if (n % 2 == 1) result = (result * x) % m;
    x = (x * x) % m;
    n = n / 2;
  }
  return result;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(0);
  int n, x, pos, left = 0, right = 0;
  cin >> n >> x >> pos;
  int arr[n];
  for (int i = 0; i < n; i++) {
    arr[i] = i + 1;
  }
  int l = 0, r = n;
  while (l < r) {
    int m = (r + l) / 2;
    if (arr[m] <= arr[pos]) {
      l = m + 1;
      left++;
    } else {
      r = m;
      right++;
    }
  }
  left--;
  if (x < left + 1 || n - x < right) {
    cout << 0;
  } else {
    long long xminus1 = 1, xminusl = 1, nminusx = 1, nminusxr = 1, lr = 1;
    for (int i = 1; i < x; i++) {
      xminus1 =
          ((xminus1 % ((1000000007))) * (i % ((1000000007)))) % ((1000000007));
    }
    for (int i = 1; i < x - left; i++) {
      xminusl =
          ((xminusl % ((1000000007))) * (i % (1000000007))) % ((1000000007));
    }
    for (int i = 1; i < n - x + 1; i++) {
      nminusx =
          ((nminusx % ((1000000007))) * (i % ((1000000007)))) % ((1000000007));
    }
    for (int i = 1; i < n - x - right + 1; i++) {
      nminusxr =
          ((nminusxr % ((1000000007))) * (i % ((1000000007)))) % ((1000000007));
    }
    for (int i = 1; i < n - left - right; i++) {
      lr = ((lr % ((1000000007))) * (i % ((1000000007)))) % ((1000000007));
    }
    lr = ((lr % ((1000000007))) * (xminus1 % ((1000000007)))) % ((1000000007));
    lr = ((lr % ((1000000007))) * (nminusx % ((1000000007)))) % ((1000000007));
    lr = ((lr % ((1000000007))) *
          (BE(xminusl, (1000000007) - 2, (1000000007)))) %
         ((1000000007));
    lr = ((lr % ((1000000007))) *
          (BE(nminusxr, (1000000007) - 2, (1000000007)))) %
         ((1000000007));
    cout << lr;
  }
  return 0;
}
