#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e5 + 5, maxm = 5e5 + 5, maxk = 3e5;
char s[maxn], t[maxm], rev[maxm], res[maxn];
int nex[maxm], mat[maxm] = {0}, mat1[maxm] = {0};
int n, m, k;
void getnext(char *s) {
  int len = strlen(s);
  nex[0] = -1;
  int k = -1, j = 0;
  while (j <= len - 1) {
    if (k == -1 || s[j] == s[k]) {
      k++, j++;
      nex[j] = k;
    } else
      k = nex[k];
  }
}
int inlow(int j, int mj) {
  if (mj - (k - j) < 0) return 0;
  return 1;
}
int kmp(char *s, char *t, int l) {
  int lens = strlen(s), lent = strlen(t);
  int r = lent - 1;
  int j = 0, i = 0;
  memset(mat, -1, sizeof(mat));
  while (i < lens) {
    if (j == -1 || s[i] == t[j]) {
      if (j != -1 && i >= l && mat[j] == -1) r = min(r, j - 1), mat[j] = i;
      i++;
      j++;
    } else {
      if (i - 1 >= l) {
        for (int o = max(0, j - (i - l)); o <= min(j - 1, r); o++)
          if (mat[o] == -1) mat[o] = i - (j - o);
        r = min(r, max(0, j - (i - l)) - 1);
      }
      j = nex[j];
    }
    if (j == lent) return i;
  }
  return -1;
}
int kmp1(char *s, char *t, int l) {
  int lens = strlen(s), lent = strlen(t);
  int r = lent - 1;
  int j = 0, i = 0;
  memset(mat1, -1, sizeof(mat1));
  while (i < lens) {
    if (j == -1 || s[i] == t[j]) {
      if (j != -1 && i >= l && mat1[j] == -1) r = min(r, j - 1), mat1[j] = i;
      i++;
      j++;
    } else {
      if (i - 1 >= l) {
        for (int o = max(0, j - (i - l)); o <= min(j - 1, r); o++)
          if (mat1[o] == -1) mat1[o] = i - (j - o);
        r = min(r, max(0, j - (i - l)) - 1);
      }
      j = nex[j];
    }
    if (j == lent) return i;
  }
  return -1;
}
int kmp2(char *s, char *p) {
  int i = 0, j = 0;
  memset(mat1, -1, sizeof(mat1));
  int slen = strlen(s), plen = strlen(p);
  while (i < slen && j < plen) {
  A:
    if (j == -1 || s[i] == p[j]) {
      i++;
      j++;
      if (mat1[j] == -1)
        if (inlow(j, i - j)) mat1[j] = i - j;
    } else {
      if (mat1[j] == -1)
        if (inlow(j, i - j)) mat1[j] = i - j;
      j = nex[j];
    }
  }
  if (j == plen) {
    return i;
  } else
    return -1;
}
int check(int a, int b) {
  if (a < 0 || b >= n) return 0;
  if (a + k > b) return 0;
  if (b + k > n) return 0;
  return 1;
}
int main() {
  cin >> n >> m >> k;
  scanf("%s", s);
  scanf("%s", t);
  getnext(t);
  int ok = kmp(s, t, k - 1);
  if (ok != -1) {
    for (int i = 0; i < n; i++)
      if (i + k + k >= ok) return 0 * printf("Yes\n%d %d", i + 1, i + k + 1);
  }
  for (int i = k + 1; i <= m; i++) mat[i] = -1;
  for (int i = 0, j = m - 1; i < m; i++, j--) rev[i] = t[j];
  rev[m] = '\0';
  getnext(rev);
  for (int i = 0, j = n - 1; i < n; i++, j--) res[i] = s[j];
  res[n] = '\0';
  kmp1(res, rev, k - 1);
  int mat2[maxn];
  for (int i = 0; i < m; i++)
    mat2[m - i - 1] = (mat1[i] == -1 ? -1 : n - mat1[i] - 1);
  for (int i = max(0, m - k - 1); i < min(k, m - 1); i++) {
    if (mat[i] != -1 && mat2[i + 1] != -1 && mat2[i + 1] > mat[i])
      return 0 * printf("Yes\n%d %d", mat[i] - k + 2, mat2[i + 1] + 1);
  }
  return 0 * puts("No");
  for (int i = 1, j = m - 1; j > 0; i++, j--) {
    if (mat[i] == -1 || mat1[j] == -1) continue;
    int a = mat[i] - (k - i), b = n - (mat1[j] + j - 1) - 1;
    if (check(a, b)) {
      printf("Yes\n%d %d", a + 1, b + 1);
      return 0;
    }
  }
  printf("No\n");
}
