#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
int n, m, K, nxt[N], f[N];
bool vis[N];
char S[N], T[N];
int main() {
  scanf("%d%d%d%s%s", &n, &m, &K, S + 1, T + 1);
  T[m + 1] = '?';
  memset(f, 127, sizeof(f));
  nxt[1] = 0;
  for (int i = 2, j = 0; i <= m; i++) {
    for (; j > 0 && T[i] != T[j + 1]; j = nxt[j])
      ;
    if (T[i] == T[j + 1]) j++;
    nxt[i] = j;
  }
  for (int i = 1, j = 0; i <= n; i++) {
    for (; j > 0 && S[i] != T[j + 1]; j = nxt[j])
      ;
    if (S[i] == T[j + 1]) j++;
    if (i >= K) {
      for (int k = j; k > 0 && !vis[k]; k = nxt[k]) vis[k] = 1, f[k] = i;
    }
    if (j == m && m <= K) {
      int l = max(1, i - K + 1);
      if (l + 2 * K - 1 <= n) {
        printf("Yes\n%d %d\n", l, l + K);
        return 0;
      }
    }
  }
  std::reverse(T + 1, T + m + 1);
  nxt[1] = 0;
  for (int i = 2, j = 0; i <= m; i++) {
    for (; j > 0 && T[i] != T[j + 1]; j = nxt[j])
      ;
    if (T[i] == T[j + 1]) j++;
    nxt[i] = j;
  }
  memset(vis, 0, sizeof(vis));
  for (int i = n, j = 0; i; i--) {
    for (; j > 0 && S[i] != T[j + 1]; j = nxt[j])
      ;
    if (S[i] == T[j + 1]) j++;
    if (i + K - 1 <= n) {
      for (int k = j; k > 0 && !vis[k]; k = nxt[k]) {
        vis[k] = 1;
        if (k <= K && m - k <= K && i > f[m - k]) {
          printf("Yes\n%d %d\n", f[m - k] - K + 1, i);
          return 0;
        }
      }
    }
    if (j == m && m <= K) {
      int r = min(n, i + K - 1);
      if (r >= 2 * K) {
        printf("Yes\n%d %d\n", r - 2 * K + 1, r - K + 1);
        return 0;
      }
    }
  }
  printf("No\n");
  return 0;
}
