#include <bits/stdc++.h>
using namespace std;
set<int> se;
struct zzz {
  int v, id;
} zz[1000005];
bool cmp(const zzz &i, const zzz &j) { return i.v > j.v; }
int N, M, K;
char S[1000005], T[1000005], s[1000005];
int z[1000005], p[2][1000005];
void w(int td) {
  for (int i = 0; i < M; i++) s[i] = T[i];
  s[M] = ' ';
  for (int i = 0; i < N; i++) s[M + 1 + i] = S[i];
  int L = 0, R = 0, n = N + M + 1;
  for (int i = 1; i < n; i++) {
    if (i > R) {
      L = R = i;
      while (R < n && s[R - L] == s[R]) R++;
      z[i] = R - L;
      R--;
    } else {
      int k = i - L;
      if (z[k] < R - i + 1)
        z[i] = z[k];
      else {
        L = i;
        while (R < n && s[R - L] == s[R]) R++;
        z[i] = R - L;
        R--;
      }
    }
  }
  for (int i = 0; i < N; i++) zz[i].v = z[M + 1 + i], zz[i].id = i;
  sort(zz, zz + N, cmp);
  int i = -1;
  se.clear();
  for (int x = M; x >= 0; x--) {
    while (i + 1 < N && zz[i + 1].v >= x) {
      i++;
      se.insert(zz[i].id);
    }
    if (se.lower_bound(K - x) == se.end())
      p[td][x] = 1000000000;
    else
      p[td][x] = *se.lower_bound(K - x);
  }
}
int main() {
  scanf("%d%d%d", &N, &M, &K);
  scanf("%s%s", S, T);
  w(0);
  for (int i = 1; i <= N; i++)
    if (z[M + i] == M) {
      puts("Yes");
      if (i + K + K - 1 <= N)
        printf("%d %d", i, i + K);
      else
        printf("%d %d", N - K - K + 1, N - K + 1);
      return 0;
    }
  reverse(S, S + N);
  reverse(T, T + M);
  w(1);
  for (int i = 1; i < M; i++)
    if (i <= K && M - i <= K && p[0][i] + i <= N - p[1][M - i] - (M - i)) {
      puts("Yes");
      printf("%d %d", p[0][i] + i - K + 1, N - p[1][M - i] - (M - i) + 1);
      return 0;
    }
  puts("No");
}
