/**
SXR0aXAkI0JwbXptI3FhI3Z3I293bCNqY2IjUG0jMCNicG0jVHFkcXZvLyNCcG0jQW10bjBhY2phcWFicXZvLyNNYm16dml0MSNWdyNhdGN1am16I2tpdiNhbXF9bSNQcXUjVnd6I0F0bW14MSNQcWEjaXptI2l0dCNicHF2b2EjUXYjYnBtI3BtaWRtdmEjaXZsI3d2I21pemJwMSNFcHcjcWEjYnBtem0ja2l2I3F2Ym16a21sbSNRdiNQcWEjeHptYW12a20jbXtrbXhiI0lhI3BtI3htenVxYmJtYnBHI1BtI3N2d2VtYnAjRXBpYiMraXh4bWl6bWJwI2J3I1BxYSNrem1pYmN6bWEjSWEsI0ptbnd6bSN3eiNJbmJteiN3eiNKbXBxdmwjYnBtdTEjVnd6I2FwaXR0I2JwbXwja3d1eGlhYSNJY29wYiN3biNwcWEjc3Z3ZXRtbG9tI017a214YiNpYSNQbSNlcXR0bWJwMSNQcWEjYnB6d3ZtI2x3YnAjbXtibXZsI1dkbXojYnBtI3BtaWRtdmEjSXZsI3d2I21pemJwLyNpdmwjUG0jbm1tdG1icCNWdyNuaWJxb2NtI3F2I29jaXpscXZvI0l2bCN4em1hbXpkcXZvI2JwbXUvI053eiNQbSNxYSNicG0jVXdhYiNQcW9wMSNCcG0jQWN4em11bSMrcXYjb3R3enwsMQ==
*/
#include <cstring>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <queue>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cassert>

#define F first
#define S second
#define endl '\n'
#define deb(x) cout<<#x<<' '<<x<<endl;
#define pb push_back

const long long MAXN = 1e6 + 1;
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;


long long readInt() {
    bool minus1 = false;
    long long result = 0;
    char ch;
    ch = getchar();
    while (true) {
        if (ch == '-') break;
        if (ch >= '0' && ch <= '9') break;
        ch = getchar();
    }
    if (ch == '-') minus1 = true; else result = ch-'0';
    while (true) {
        ch = getchar();
        if (ch < '0' || ch > '9') break;
        result = result*10 + (ch - '0');
    }
    if (minus1)
        return -result;
    else
        return result;
}

const int N = 1111;

char ans[N][N];

main() {
	#ifdef IZI_KATKA
	assert(freopen("input", "r", stdin));
    assert(freopen("output", "w", stdout));
    #endif
    int n = readInt(), m = readInt(), a = readInt(), b = readInt();
    if (2 * (a + b) > n * m) {
        cout << "NO";
        return 0;
    }
    if (n % 2) {
        for (int i = 0; i + 1 < m; i += 2) {
            if (a) {
                ans[n - 1][i] = '<';
                ans[n - 1][i + 1] = '>';
                a--;
            }
        }
    }
    if (m % 2) {
        for (int i = n % 2; i < n; i += 2) {
            if (b) {
                ans[i][m - 1] = '^';
                ans[i + 1][m - 1] = 'v';
                b--;
            }
        }
    }
    for (int i = n - n % 2 - 2; i >= 0; i -= 2) {
        for (int j = 0; j + 1 < m; j += 2) {
            if (a >= 2) {
                ans[i][j] = '<';
                ans[i][j + 1] = '>';
                ans[i + 1][j] = '<';
                ans[i + 1][j + 1] = '>';
                a -= 2;
            } else if (b >= 2) {
                ans[i][j] = '^';
                ans[i][j + 1] = '^';
                ans[i + 1][j] = 'v';
                ans[i + 1][j + 1] = 'v';
                b -= 2;
            } else if (a == 1 && b == 1 && i == 0 && j == m - 3 && n % 2 == 1) {
                ans[i][j] = '^';
                ans[i + 1][j] = 'v';
                ans[i][j + 1] = '<';
                ans[i][j + 2] = '>';
                a--;
                b--;
            } else if (a == 1) {
                ans[i][j] = '<';
                ans[i][j + 1] = '>';
                a--;
            } else if (b == 1) {
                ans[i][j] = '^';
                ans[i + 1][j] = 'v';
                b--;
            }
        }
    }
    if (a || b) {
        cout << "NO";
        return 0;
    }
    cout << "YES\n";
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (ans[i][j])
            cout << ans[i][j];
            else
            cout << '.';
        }
        cout << endl;
    }
    return 0;
}


Measured memory_bytes: 2304