#include <bits/stdc++.h>

using namespace std;

using ll = long long int;

#define REP(i, N) for (int i = 0; i < (N); ++i)
#define scanInt(x) int x; scanf("%d", &(x)); getchar();
#define scanLLInt(x) ll x; scanf("%lld", &(x)); getchar();
#define scanVecInt(A, N) vector<int> A(N); REP(i, N){scanf("%d", &(A[i])); getchar();}
#define scanVecLLInt(A, N) vector<ll> A(N); REP(i, N){scanf("%lld", &(A[i])); getchar();}

int main()
{
    scanInt(N);
    scanInt(M);
    scanInt(A);
    scanInt(B);
    vector<vector<char>> board(N, vector<char>(M, '.'));
    const int N2 = N / 2;
    const int Nr = N % 2;
    const int M2 = M / 2;
    const int Mr = M % 2;
    bool last_flag = false;
    if (Nr == 1 && 3 <= N && Mr == 1 && 3 <= M && A * 2 + B * 2 + 1 == N * M &&
        N2 % 2 != B % 2){
        board[N - 3][M - 3] = board[N - 1][M - 2] = '<';
        board[N - 3][M - 2] = board[N - 1][M - 1] = '>';
        board[N - 3][M - 1] = board[N - 2][M - 3] = '^';
        board[N - 2][M - 1] = board[N - 1][M - 3] = 'v';
        A -= 2;
        B -= 2;
        last_flag = true;
    }
    if (Nr == 1){
        REP(m2, M2){
            if (A <= 0) break;
            if (last_flag && m2 == M2 - 1) break;
            board[N - 1][m2 * 2] = '<';
            board[N - 1][m2 * 2 + 1] = '>';
            A -= 1;
        }
    }
    if (Mr == 1){
        REP(n2, N2){
            if (B <= 0) break;
            if (last_flag && n2 == N2 - 1) break;
            board[n2 * 2][M - 1] = '^';
            board[n2 * 2 + 1][M - 1] = 'v';
            B -= 1;
        }
    }
    REP(n2, N2){
        if (A <= 0 && B <= 0) break;
        REP(m2, M2){
            if (A <= 0 && B <= 0) break;
            if (last_flag && n2 == N2 - 1 && m2 == M2 - 1) break;
            if (2 <= A){
                board[n2 * 2][m2 * 2] = board[n2 * 2 + 1][m2 * 2] = '<';
                board[n2 * 2][m2 * 2 + 1] = board[n2 * 2 + 1][m2 * 2 + 1] = '>';
                A -= 2;
            }else if (2 <= B){
                board[n2 * 2][m2 * 2] = board[n2 * 2][m2 * 2 + 1] = '^';
                board[n2 * 2 + 1][m2 * 2] = board[n2 * 2 + 1][m2 * 2 + 1] = 'v';
                B -= 2;
            }else if (A == 1){
                board[n2 * 2][m2 * 2] = '<';
                board[n2 * 2][m2 * 2 + 1] = '>';
                A -= 1;
            }else if (B == 1){
                board[n2 * 2][m2 * 2] = '^';
                board[n2 * 2 + 1][m2 * 2] = 'v';
                B -= 1;
            }
        }
    }
    // if (Nr == 1 && Mr == 1){
    //     if (A <= 2 && B <= 2){
    //         if (1 <= A){
    //             board[N - 3][M - 3] = '<';
    //             board[N - 3][M - 2] = '>';
    //             A -= 1;
    //         }
    //         if (1 <= A){
    //             board[N - 1][M - 2] = '<';
    //             board[N - 1][M - 1] = '>';
    //             A -= 1;
    //         }
    //         if (1 <= B){
    //             board[N - 3][M - 1] = '^';
    //             board[N - 2][M - 1] = 'v';
    //             B -= 1;
    //         }
    //         if (1 <= B){
    //             board[N - 2][M - 3] = '^';
    //             board[N - 1][M - 3] = 'v';
    //             B -= 1;
    //         }
    //     }else if (A <= 3 && B <= 1){
    //         REP(i, 3){
    //             if (1 <= A){
    //                 board[N - 1 - i][M - 3] = '<';
    //                 board[N - 1 - i][M - 2] = '>';
    //                 A -= 1;
    //             }
    //         }
    //         if (1 <= B){
    //             board[N - 3][M - 1] = '^';
    //             board[N - 2][M - 1] = 'v';
    //             B -= 1;
    //         }
    //     }else if (A <= 1 && B <= 3){
    //         REP(i, 3){
    //             if (1 <= B){
    //                 board[N - 3][M - 1 - i] = '^';
    //                 board[N - 2][M - 1 - i] = 'v';
    //                 B -= 1;
    //             }
    //         }
    //         if (1 <= A){
    //             board[N - 2][M - 3] = '^';
    //             board[N - 1][M - 3] = 'v';
    //             B -= 1;
    //         }
    //     }
    // }
    if (A <= 0 && B <= 0){
        puts("YES");
    }else{
        puts("NO");
        return 0;
    }
    REP(n, N){
        REP(m, M){
            cout << board[n][m];
        }
        cout << endl;
    }
}


Measured memory_bytes: 2176