#include <bits/stdc++.h>
using namespace std;
using ll = long long int;
#define inf 1000000000000000LL
#define mod 1000000007LL
#define FOR(i,a,b) for(int i = a; i < b; i++)
const ll Mod1 = 1000000007LL;
const ll Mod2 = 1000000009LL;
const ll Base = 271LL;

struct hashed_string{
    vector <ll> prefix1, prefix2;
    vector <ll> pow1, pow2;
    ll n;

    hashed_string(string s){
        n = s.size();
        prefix1.assign(n, 0);
        prefix2.assign(n, 0);
        pow1.assign(n + 1, 0);
        pow2.assign(n + 1, 0);

        pow1[0] = 1;
        pow2[0] = 1;

        for (int i = 1; i <= n; i++){
            pow1[i] = pow1[i - 1] * Base % Mod1;
            pow2[i] = pow2[i - 1] * Base % Mod2;
        }

        for (int i = 0; i < n; i++){
            ll val = s[i] - 'a' + 1;

            prefix1[i] = ((i ? prefix1[i - 1] * Base : 0) + val) % Mod1;
            prefix2[i] = ((i ? prefix2[i - 1] * Base : 0) + val) % Mod2;
        }
    }

    pair<ll,ll> get_hash(ll l, ll r){
        ll h1 = prefix1[r];
        ll h2 = prefix2[r];

        if (l >= 1){
            h1 = (h1 - prefix1[l - 1] * pow1[r - l + 1] % Mod1 + Mod1) % Mod1;
            h2 = (h2 - prefix2[l - 1] * pow2[r - l + 1] % Mod2 + Mod2) % Mod2;
        }

        return {h1, h2};
    }
};
void solve() {
    ll n,m,x; string s1,s2;
    cin >> n >> s1 >> m >> s2 >> x;
    hashed_string v = hashed_string(s1);
    hashed_string g = hashed_string(s2);
    vector <vector <ll>> dp(n+1, vector <ll>(x+1, -1));
    for (int i = 0; i <= n; i++){
        for (int j = x; j >= 0; j--){
            if (i >= 1)
                dp[i][j] = max(dp[i][j], dp[i-1][j]);
            if (dp[i][j] == m - 1 || i == n || j == x) continue;
            ll lo = dp[i][j] + 1;
            ll hi = min(m - 1, dp[i][j] + n - i);
            while (lo < hi){
                ll mid = (lo + hi + 1) / 2;
                if (g.get_hash(dp[i][j] + 1, mid) == v.get_hash(i, i + mid - dp[i][j] - 1)){
                    lo = mid;
                }
                else{
                    hi = mid - 1;
                }
            }
            if (g.get_hash(dp[i][j] +1, lo) == v.get_hash(i, i + lo - dp[i][j] - 1)){
                dp[i + lo - dp[i][j]][j + 1] = max(dp[i + lo - dp[i][j]][j + 1], lo);
            }
        }
    }
    ll answ = -1;
    for (int i = 0; i <= x; i++){
        answ = max(answ, dp[n][i]);
    }
    cout << (answ == m - 1 ? "YES" : "NO") << "\n";
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    ll t = 1;
    while (t--) {
        solve();
    }

    return 0;
}