スマートかどうか知らんが
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main(int argc, char **argv)
{
char *p;

if (argc != 2) exit(EXIT_FAILURE);
if (strlen(argv[1]) > 1001) exit(EXIT_FAILURE);
for (p = argv[1]; *p != '\0'; p++) {
if (!isupper(*p)) {
exit(EXIT_FAILURE);
}
}

for (p = argv[1]; *p != '\0'; p++) {
putchar(((*p) - 'A' + 26 - 3) % 26 + 'A');
}
putchar('\n');

exit(EXIT_SUCCESS);
}