#include <bits/stdc++.h>
using namespace std;
const long long maxn = 5e5 + 10;
const long long mod = 998244353;
const long long base = 1e9;
mt19937_64 rnd;
struct Hashing {
  vector<vector<vector<long long>>> f;
  vector<long long> mod;
  vector<vector<long long>> mu;
  vector<long long> chr;
  long long num;
  long long base;
  void init(long long num1) {
    num = num1;
    vector<long long> vt = {999244369, 999254351, 999154309, 989154311,
                            989254411, 997254397, 991294387, 991814399,
                            994114351, 994914359, 994024333};
    random_shuffle(vt.begin(), vt.end());
    base = 317;
    for (int i = 1; i <= 26; i++) chr.push_back(abs((long long)(rnd())));
    for (int i = 0; i < num; i++) {
      f.emplace_back();
      mod.push_back(vt[i]);
      vector<long long> pt;
      pt.push_back(1);
      for (int j = 1; j < maxn; j++) {
        pt.push_back((pt.back() * base) % mod[i]);
      }
      mu.push_back(pt);
    }
  }
  long long add(string s) {
    long long n = s.length();
    long long id = f[0].size();
    for (int j = 0; j < num; j++) {
      vector<long long> vt1;
      vt1.push_back(0);
      for (int i = 1; i <= n; i++) {
        vt1.push_back((vt1.back() * base + chr[s[i - 1] - 'a']) % mod[j]);
      }
      f[j].push_back(vt1);
    }
    return id;
  }
  long long get_hash(long long id, long long l, long long r) {
    long long i = num - 1;
    return ((f[i][id][r] - f[i][id][l - 1] * mu[i][r - l + 1]) % mod[i] +
            mod[i]) %
           mod[i];
  }
};
int mn[maxn];
int mn1[maxn];
int nxt[maxn];
int par[maxn];
int find_par(int u) {
  if (par[u] < 0) return u;
  return par[u] = find_par(par[u]);
}
void dsu(int x, int y) {
  x = find_par(x);
  y = find_par(y);
  if (x == y) return;
  if (par[x] > par[y]) swap(x, y);
  par[x] += par[y];
  nxt[x] = max(nxt[x], nxt[y]);
  par[y] = x;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  if (fopen("t.inp", "r")) {
    freopen("test.inp", "r", stdin);
    freopen("test.out", "w", stdout);
  }
  int n, m, k;
  cin >> n >> m >> k;
  string s;
  cin >> s;
  string t;
  cin >> t;
  Hashing man;
  man.init(1);
  int id_s = man.add(s);
  int id_t = man.add(t);
  mn[0] = 1;
  mn1[0] = n - k + 1;
  for (int i = 1; i <= m; i++) {
    mn[i] = base;
    mn1[i] = -base;
    nxt[i] = i;
    par[i] = -1;
  }
  for (int i = 1; i <= n; i++) {
    long long l = 1, h = min(n - i + 1, m);
    while (l <= h) {
      long long mid = (l + h) / 2;
      if (man.get_hash(id_s, i, i + mid - 1) == man.get_hash(id_t, 1, mid))
        l = mid + 1;
      else
        h = mid - 1;
    }
    if (h == m) {
      if (i + 2 * k - 1 <= n) {
        cout << "Yes"
             << "\n";
        cout << i << " " << i + k << "\n";
        return 0;
      } else {
        cout << "Yes"
             << "\n";
        cout << n - 2 * k + 1 << " " << n - k + 1 << "\n";
        return 0;
      }
    }
    if (h && i + h - 1 >= k) {
      int ed = h;
      int st = max(k - i, 0) + 1;
      int nw = st;
      while (nw <= ed) {
        if (mn[nw] != base) {
          nw = nxt[find_par(nw)] + 1;
        } else {
          mn[nw] = i + nw - k;
          if (nw > 1 && mn[nw - 1] != base) dsu(nw, nw - 1);
          if (nw < m && mn[nw + 1] != base) dsu(nw, nw + 1);
          nw++;
        }
      }
    }
  }
  for (int i = 1; i <= m; i++) nxt[i] = i, par[i] = -1;
  for (int i = n; i >= 1; i--) {
    int l = 1, h = min(i, m);
    while (l <= h) {
      int mid = (l + h) / 2;
      if (man.get_hash(id_s, i - mid + 1, i) ==
          man.get_hash(id_t, m - mid + 1, m))
        l = mid + 1;
      else
        h = mid - 1;
    }
    if (h == m) {
      if (i - 2 * k + 1 >= 1) {
        cout << "Yes"
             << "\n";
        cout << i - 2 * k + 1 << " " << i - k + 1 << "\n";
        return 0;
      } else {
        cout << "Yes"
             << "\n";
        cout << 1 << " " << 1 + k << "\n";
        return 0;
      }
    }
    if (h && i - h + 1 <= n - k + 1) {
      int st = max(0, i - (n - k + 1)) + 1;
      int ed = h;
      int nw = st;
      while (nw <= ed) {
        if (mn1[nw] != -base) {
          nw = nxt[find_par(nw)] + 1;
        } else {
          mn1[nw] = i - nw + 1;
          if (nw > 1 && mn1[nw - 1] != -base) dsu(nw, nw - 1);
          if (nw < m && mn1[nw + 1] != -base) dsu(nw, nw + 1);
          nw++;
        }
      }
    }
  }
  for (int i = 1; i <= m; i++) {
    if (mn[i] + k - 1 < mn1[m - i] && i <= k && m - i <= k) {
      cout << "Yes"
           << "\n";
      cout << mn[i] << " " << mn1[m - i] << "\n";
      return 0;
    }
  }
  cout << "No";
  return 0;
}
