import std.stdio, std.string, std.conv;
import std.range, std.algorithm, std.array;


void main() {
    int n, m, a, b;
    scan(n, m, a, b);

    auto ban = new char[][](n, m);
    fillAll(ban, '.');

    if (n == 1) {
        if (b > 0 || 2*a > m) {
            writeln("NO");
            return;
        }

        foreach (i ; 0 .. m / 2) {
            if (a <= 0) break;
            a--;
            ban[0][2*i] = '<';
            ban[0][2*i + 1] = '>';
        }

        writeln(ban[0]);
        return;
    }

    if (n % 2 == 0) {
        foreach (c ; 0 .. m / 2) {
            auto t = min(a, n);
            a -= t;
            foreach (i ; 0 .. t) {
                ban[i][2*c] = '<';
                ban[i][2*c+1] = '>';
            }
            if (a <= 0) break;
        }
    }
    else {
        foreach (c ; 0 .. m / 2) {
            auto t = min(a, n - 2);
            a -= t;
            foreach (i ; 0 .. t) {
                ban[i][2*c] = '<';
                ban[i][2*c + 1] = '>';
            }
            if (a <= 0) break;
        }

        if (a > 0) {
            foreach (c ; 0 .. m / 2) {
                auto t = min(a, 2);
                a -= t;
                foreach (i ; 0 ..t) {
                    ban[n - 2 + i][2*c] = '<';
                    ban[n - 2 + i][2*c + 1] = '>';
                }
                if (a <= 0) break;
            }
        }
    }

    if (a > 0) {
        writeln("NO");
        return;
    }

    debug {
        iota(n).each!(i => writeln(ban[i]));
    }


    foreach_reverse (c ; 0 .. m) {
        foreach (r ; 0 .. n / 2) {
            if (b <= 0) {
                goto BBB;
            }
            if (ban[n - 1 - 2*r][c] != '.' || ban[n - 1 - 2*r - 1][c] != '.') continue;
            ban[n - 1 - 2*r][c] = 'v';
            ban[n - 1 - 2*r - 1][c] = '^';
            b--;
        }
    }

    BBB:

    if (b > 0) {
        writeln("NO");
        return;
    }

    writeln("YES");
    iota(n).each!(i => writeln(ban[i]));
}



void scan(T...)(ref T args) {
    import std.stdio : readln;
    import std.algorithm : splitter;
    import std.conv : to;
    import std.range.primitives;

    auto line = readln().splitter();
    foreach (ref arg; args) {
        arg = line.front.to!(typeof(arg));
        line.popFront();
    }
    assert(line.empty);
}



void fillAll(R, T)(ref R arr, T value) {
    static if (is(typeof(arr[] = value))) {
        arr[] = value;
    }
    else {
        foreach (ref e; arr) {
            fillAll(e, value);
        }
    }
}
