Problem: Training is indispensable for achieving good results at ICPC. Rabbit wants to win at ICPC, so he decided to practice today as well.

Today's training is to use the Amidakuji to improve luck by gaining the ability to read the future. Of course, not only relying on intuition, but also detailed probability calculation is indispensable.

The Amidakuji we consider this time consists of N vertical bars with a length of H + 1 cm. The rabbit looks at the top of the stick and chooses one of the N. At the bottom of the bar, "hit" is written only at the location of the Pth bar from the left. The Amidakuji contains several horizontal bars. Consider the following conditions regarding the arrangement of horizontal bars.

* Each horizontal bar is at a height of a centimeter from the top of the vertical bar, where a is an integer greater than or equal to 1 and less than or equal to H.
* Each horizontal bar connects only two adjacent vertical bars.
* There are no multiple horizontal bars at the same height.



The rabbit drew M horizontal bars to satisfy these conditions. Unfortunately, the rabbit has a good memory, so I remember all the hit positions and the positions of the horizontal bars, so I can't enjoy the Amidakuji. So I decided to have my friend's cat add more horizontal bars.

First, the rabbit chooses one of the N sticks, aiming for a hit. After that, the cat performs the following operations exactly K times.

* Randomly select one of the locations that meet the conditions specified above even if a horizontal bar is added. Here, it is assumed that every place is selected with equal probability. Add a horizontal bar at the selected location.



Then, it is determined whether the stick selected by the rabbit was a hit. The way to follow the bars is the same as the normal Amidakuji (every time you meet a horizontal bar, you move to the next vertical bar). Rabbits want to have a high probability of winning as much as possible.



Input


H N P M K
A1 B1
...
AM BM


In Ai, Bi (1 ≤ i ≤ M), the i-th horizontal bar drawn by the rabbit is at a height of Ai centimeters from the top of the vertical bar, and the second vertical bar from the left and Bi from the left. + An integer that represents connecting the first vertical bar.

2 ≤ H ≤ 500, 2 ≤ N ≤ 100, 1 ≤ P ≤ N, 1 ≤ M ≤ 100, 1 ≤ K ≤ 100, M + K ≤ H, 1 ≤ A1 <A2 <... <AM ≤ H, Satisfy 1 ≤ Bi ≤ N-1.

Output

Output the probability of winning in one line when the rabbit chooses a stick so that the probability of winning is maximized. Absolute errors of 10-6 or less are allowed.

Examples

Input

9 4 3 2 1
2 1
7 3


Output

0.571428571


Input

9 4 3 2 3
2 1
7 3


Output

0.375661376

Solution (in CPP):

Solution:
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <assert.h>
#include <vector>
#include <queue>
#include <string>
#include <map>
#include <set>

using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
static const double EPS = 1e-9;
static const double PI = acos(-1.0);

#define REP(i, n) for (int i = 0; i < (int)(n); i++)
#define FOR(i, s, n) for (int i = (s); i < (int)(n); i++)
#define FOREQ(i, s, n) for (int i = (s); i <= (int)(n); i++)
#define FORIT(it, c) for (__typeof((c).begin())it = (c).begin(); it != (c).end(); it++)
#define MEMSET(v, h) memset((v), h, sizeof(v))

int h, n, p, m, k;
int A[110];
int B[110];

int sum[600];
bool exist[600];
int himo[600];

double DP[510][110][110];

int main() {
  while (scanf("%d %d %d %d %d", &h, &n, &p, &m, &k) > 0) {
    p--;
    MEMSET(exist, false);
    MEMSET(himo, 0xde);
    MEMSET(sum, 0);
    MEMSET(DP, 0);
    REP(i, m) {
      scanf("%d %d", &A[i], &B[i]);
      B[i]--;
      exist[A[i]] = true;
      himo[A[i]] = B[i];
    }
    REP(i, h + 2) {
      sum[i + 1] = sum[i] + exist[i];
    }

    DP[h][p][k] = 1.0;
    for (int y = h; y > 0; y--) {
      REP(x, n) {
        REP(rest, k + 1) {
          if (exist[y]) {
            if (himo[y] == x) {
              DP[y - 1][x + 1][rest] += DP[y][x][rest];
            } else if (himo[y] == x - 1) {
              assert(x > 0);
              DP[y - 1][x - 1][rest] += DP[y][x][rest];
            } else {
              DP[y - 1][x][rest] += DP[y][x][rest];
            }
          } else {
            assert(y - sum[y] > 0);
            if (rest > y - sum[y]) { continue; }
            double useP = (double)rest / (y - sum[y]);
            DP[y - 1][x][rest] += (1.0 - useP) * DP[y][x][rest];
            if (rest == 0) { continue; }
            double restP = 1.0;
            if (x != n - 1) {
              restP -= 1.0 / (n - 1);
              DP[y - 1][x + 1][rest - 1] += useP / (n - 1) * DP[y][x][rest];
            }
            if (x != 0) {
              restP -= 1.0 / (n - 1);
              DP[y - 1][x - 1][rest - 1] += useP / (n - 1) * DP[y][x][rest];
            }
            DP[y - 1][x][rest - 1] += useP * restP * DP[y][x][rest];
          }
        }
      }
    }
    double ans = 0.0;
    REP(x, n) {
      ans = max(ans, DP[0][x][0]);
    }

    printf("%.8f\n", ans);
  }
}