#include <cstdio>
#include <algorithm>
#include <numeric>
using namespace std;

const int MAX_H = 500;
const int MAX_N = 100;

int H, N, P, M, K;

bool is_used[MAX_H];
int bridge[MAX_H];

double dp[MAX_H + 1][MAX_N + 2][MAX_N];

double solve(){
	dp[H][0][P-1] = 1.0;

	for(int h=H; h>=1; h--){
		if(is_used[h]){
			for(int i=0; i<=K; i++){
				for(int j=0; j<N; j++){
					dp[h-1][i][j] += dp[h][i][j];
				}
				swap(dp[h-1][i][bridge[h]], dp[h-1][i][bridge[h]+1]);
			}
		}
		else{
			int free_count = count(is_used + 1, is_used + (h + 1), false);
			for(int i=0; i<=K; i++){
				double chosen_prob = (double)(K - i) / free_count;
				for(int j=0; j<N; j++){
					if(j>0) dp[h-1][i+1][j-1] += chosen_prob * 1.0 / (N-1) * dp[h][i][j];
					if(j<N-1) dp[h-1][i+1][j+1] += chosen_prob * 1.0 / (N-1) * dp[h][i][j];
					dp[h-1][i+1][j] += chosen_prob * (1.0 - (j==0 || j==N-1 ? 1.0 : 2.0)/(N-1)) * dp[h][i][j];
					dp[h-1][i][j] += (1.0 - chosen_prob) * dp[h][i][j];
				}
			}
		}
	}

	return *max_element(dp[0][K], dp[0][K] + N);
}

int main(){
	scanf("%d%d%d%d%d",&H, &N, &P, &M, &K);
	for(int i=0; i<M; i++){
		int a, b;
		scanf("%d%d", &a, &b);
		is_used[a] = true;
		bridge[a] = b - 1;
	}

	printf("%.10f\n", solve());

	return 0;
}