#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
#include <set>
#include <functional>
#include <queue>
using namespace std;
const int INT_INF = 500000000;
const long long LONG_LONG_INF = (long long)pow(10, 18);
const int MOD = pow(10, 9) + 7;
/* contest template */
int N, M, A, B;
vector<string> sList(1000, string(1000, '.'));
bool impossible = false;

void init(int n, int m, int a, int b)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            sList[i][j] = '.';
        }
    }
    int i = 0;
    int j = 0;
    if (n % 2 == 1)
    {
        while (a > 0 && j <= m - 2)
        {
            sList[n - 1][j] = '<';
            sList[n - 1][j + 1] = '>';
            j += 2;
            a--;
        }
    }
    if (m % 2 == 1)
    {
        while (b > 0 && i <= n - 2)
        {
            sList[i][m - 1] = '^';
            sList[i + 1][m - 1] = 'v';
            i += 2;
            b--;
        }
    }
    A = a;
    B = b;
}

void ee(int n, int m, int a, int b)
{
    int i = 0;
    int j = 0;
    if (n * m == (a + b) * 2 && a % 2 != 0 && b % 2 != 0 && N % 2 != 0 && M % 2 != 0)
    {
        while (a >= 3)
        {
            sList[i][j] = '<';
            sList[i][j + 1] = '>';
            sList[i + 1][j] = '<';
            sList[i + 1][j + 1] = '>';
            a -= 2;
            if (j >= m - 2)
            {
                i += 2;
                j = 0;
            }
            else
                j += 2;
        }
        while (b >= 3)
        {
            sList[i][j] = '^';
            sList[i][j + 1] = '^';
            sList[i + 1][j] = 'v';
            sList[i + 1][j + 1] = 'v';
            b -= 2;
            if (j >= m - 2)
            {
                i += 2;
                j = 0;
            }
            else
                j += 2;
        }
        sList[i][j] = '^';
        sList[i + 1][j] = 'v';
        sList[i][j + 1] = '<';
        sList[i][j + 2] = '>';
        if (sList[i + 1][j + 2] == 'v')
        {
            sList[i + 1][j + 2] = '^';
            sList[i + 2][j + 2] = 'v';
        }
    }
    else if (m * n > (a + b) * 2 || (m * n == (a + b) * 2 && a % 2 == 0 && b % 2 == 0))
    {
        while (a >= 2)
        {
            sList[i][j] = '<';
            sList[i][j + 1] = '>';
            sList[i + 1][j] = '<';
            sList[i + 1][j + 1] = '>';
            a -= 2;
            if (j >= m - 2)
            {
                i += 2;
                j = 0;
            }
            else
                j += 2;
        }
        while (b >= 2)
        {
            sList[i][j] = '^';
            sList[i][j + 1] = '^';
            sList[i + 1][j] = 'v';
            sList[i + 1][j + 1] = 'v';
            b -= 2;
            if (j >= m - 2)
            {
                i += 2;
                j = 0;
            }
            else
                j += 2;
        }
        if (a == 1)
        {
            sList[i][j] = '<';
            sList[i][j + 1] = '>';
            if (j >= m - 2)
            {
                i += 2;
                j = 0;
            }
            else
                j += 2;
        }
        if (b == 1)
        {
            sList[i][j] = '^';
            sList[i + 1][j] = 'v';
            if (j >= m - 2)
            {
                i += 2;
                j = 0;
            }
            else
                j += 2;
        }
    }
    else
        impossible = true;
}
int main()
{
    cin >> N >> M >> A >> B;
    init(N, M, A, B);
    if (N % 2 == 0)
    {
        if (M % 2 == 0)
            ee(N, M, A, B);
        else
            ee(N, M - 1, A, B);
    }
    else
    {
        if (M % 2 == 0)
            ee(N - 1, M, A, B);
        else
            ee(N - 1, M - 1, A, B);
    }
    if (impossible)
    {
        cout << "NO" << endl;
    }
    else
    {
        cout << "YES" << endl;
        for (int i = 0; i < N; i++)
        {
            for (int j = 0; j < M; j++)
            {
                cout << sList[i][j];
                if (j == M - 1)
                    cout << endl;
            }
        }
    }

    return 0;
}


Measured memory_bytes: 2304