#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <cstdio>
#include <utility>
using namespace std;
typedef pair<int, int> PII;

const int N = 100005;
int n, m, k;
int a[N], b[N], fail[N];
int sum[N][26];
int ans;

void init(){
	vector<PII> v;
	for(int i = 0; i < m; i++) v.push_back(PII(b[i], i));
	sort(v.begin(), v.end());
	
	b[v[0].second] = 1;
	for(int i = 1; i < m; i++){
		if(v[i].first == v[i - 1].first) b[v[i].second] = b[v[i - 1].second];
		else b[v[i].second] = i + 1;
	}
	
	fail[0] = fail[1] = 0;
	for(int i = 1; i < m; i++){
		int j = fail[i];
		while(j != 0 && b[i] != b[j]) j = fail[j];
			fail[i + 1] = b[i] == b[j] ? j + 1 : 0;
	}

	memset(sum, 0, sizeof(sum));
	for(int j = a[0] + 1; j <= k; j++) sum[0][j]++;
	for(int i = 1; i < n; i++){
		for(int j = 1; j <= k; j++)
			sum[i][j] = sum[i - 1][j];
		for(int j = a[i] + 1; j <= k; j++)
			sum[i][j]++;
	}
	ans = 0;
}

int rank(int st, int i){
	if(st + m > n) return -1;
	int end = st + m - 1, val = a[i];
	int ret = sum[end][val] + 1;
	if(st > 0) ret -= sum[st - 1][val];
	return ret;
}

void gao(){
	int now = 0;
	for(int i = 0; i < n; i++){
		int rk = rank(i - now, i);
		while(now != 0 && rk != b[now]) now = fail[now];
		if(rk == b[now]) now++;
		if(now == m){
			now = 0;
			ans++;
		}
	}
}

int main(){
	while(3 == scanf("%d %d %d", &n, &m, &k)){
		for(int i = 0; i < n; i++)
			scanf("%d", a + i);
		for(int i = 0; i < m; i++)
			scanf("%d", b + i);
		init();
		gao();
		printf("%d\n", ans);
	}
	return 0;
}
